触发器问题(150分数开贴给解决问题者!!!)

jxc163 2003-10-18 11:52:39
1、在触发器中可以和用户进行交互以及外在参数吗?怎样实现?
比如:在删除一条记录时,让用户选择是否把记录中的某一部分保存到另一个表中;触发器根据程序运行时的一个参数,如FLAG(BOOLEAN)的值进行判断,进而选择执行某种操作。

2、在写一个INSERT以及NSERTUPDATE触发器时,如何判断其中的某个字段是否是nil(字符型)或空值,并把另一个字段的值赋给该字段?


...全文
80 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
txlicenhe 2003-10-29
  • 打赏
  • 举报
回复
1:
try
{
锁键盘和鼠标
运行脚本
打开键盘和鼠标
显示完成
}
catch
...


2:
对于超时,如下处理:

1:企业管理器->服务器->属性->连接->查询超时(改为0或一个较大的数)
2:ADO的连接超时属性connectiontimeout 设大点.
3:ADO的CommandTimeout设大点
jxc163 2003-10-29
  • 打赏
  • 举报
回复
To 马可:

这样在程序执行时通过什么方法知道命令已经执行完了呢,并在程序执行过程中锁定键盘与鼠标?
而且我在执行这个命令时会在最后出现OLE错误,提示“操作已过期”,是什么原因呢?(我的数据库脚本为140K)

isql -S .\Yxmis -E -a 8192 -l 60 <E:\Yxmis\sql\CreateDb1.sql

To 大力:

老兄的方法我先试试再看
jxc163 2003-10-29
  • 打赏
  • 举报
回复
请马可到:http://expert.csdn.net/Expert/topic/2406/2406819.xml?temp=.7752039

请大力到:http://expert.csdn.net/Expert/topic/2406/2406818.xml?temp=.9781458
jxc163 2003-10-29
  • 打赏
  • 举报
回复
创建数据库的问题使用马可的方法通过。
XXSingle 2003-10-28
  • 打赏
  • 举报
回复
up好象只能用存储过程!
txlicenhe 2003-10-28
  • 打赏
  • 举报
回复
你可以执行如下SQL语句来运行脚本:
master..xp_cmdshell 'isql /S"服务器名" /U"用户名" /P"密码" /i"x:\xxx.sql"'

master.dbo.xp_cmdshell 'osql -U 用户名 -P 密码 -i c:\***.sql'
dickeybird888 2003-10-28
  • 打赏
  • 举报
回复
好象只能用存储过程
!
pengdali 2003-10-28
  • 打赏
  • 举报
回复
s:string;
sqlfile:textfile;

AssignFile(sqlfile, 'update.sql');
Reset(sqlfile);
while not eof(sqlfile) do
begin
Readln(sqlfile, s);
sqltext:=s;
while (not eof(sqlfile)) and (uppercase(trim(s))<>'GO') do
begin
Readln(sqlfile, s);
if (uppercase(trim(s))<>'GO') then
sqltext:=sqltext+' '+s;
end;
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add(sqltext);
adoquery1.ExecSQL;
end;
CloseFile(sqlfile);

application.MessageBox('数据库升级完成!','提示',MB_OK+MB_ICONINFORMATION);

//注:上述代码要求update.sql文件中语句无注释
jxc163 2003-10-28
  • 打赏
  • 举报
回复
我回去试试看
txlicenhe 2003-10-28
  • 打赏
  • 举报
回复
你可以执行如下SQL语句来运行脚本:
master..xp_cmdshell 'isql /S"服务器名" /U"用户名" /P"密码" /i"x:\xxx.sql"'
jxc163 2003-10-28
  • 打赏
  • 举报
回复
用MS-SQL 2000生成的数据库脚本,在DELPHI中用ADOCONNECT把这个脚本读入运行,会有下面几个问题:
1、分隔语句GO不能通过ADOCONNECT执行,会提示出错信息;
2、CREATE VIEW以及CREATE TRIGGER只能在首行运行,从而造成这个脚本在DELPHI下不能通过ADOCONNECT来读入运行。

请问:有什么方法可以解决这两个问题,以使这个脚本可以正常运行?

这样我们就可把在程序中所用到的SQL语句全部保存到一个表中,这样在SQL语句需要改动时,只要更改这个表就可以,同样可以避免在用户的磁盘中保存太多的SQL脚本。
jxc163 2003-10-24
  • 打赏
  • 举报
回复
如何写一个触发器更新所有表中的一个指定字段呢?(字段名相同,类型相同)
jxc163 2003-10-24
  • 打赏
  • 举报
回复
级联更新也就是更新主键对吗?

如果同时又要更新其它的一个字段,而这个字段的内容不是唯一的,这时是否还可以用触发器来完成呢
txlicenhe 2003-10-24
  • 打赏
  • 举报
回复
如果设置了外键,就不能随便修改主键。
可以设置级联更新,不用触发器。

级联更新和级联删除:

alter table mylocation
add constraint fk_mylocation_myname foreign key(myname) references myname(name)
on update cascade on delete cascade


alter table 表2
add constraint fk_mylocation_myname foreign key(字段1,字段2)references 表1(字段1,字段2)
on update cascade on delete cascade
jxc163 2003-10-24
  • 打赏
  • 举报
回复
上面的一个问题呢?
如果我设置外键的话,还不可以使用触发器
txlicenhe 2003-10-24
  • 打赏
  • 举报
回复
Create trigger 名 on tableName
For update
As
update t1 set ...
if @@error <> 0 goto err
update t2 set ...
if @@error <> 0 goto err
update t3 set ...
if @@error <> 0 goto err
...
return
Err:
rollback


jxc163 2003-10-22
  • 打赏
  • 举报
回复
大力:
我在表上添加了自己的那个触发器后,在删除记录时根本不会更新另一个表。所以我不知道问题究竟在什么地方,看起来语法没有错的地方,所以才想不明白。

马可:
写参数到一个临时表的方法看起来可以用,我先试试看
txlicenhe 2003-10-21
  • 打赏
  • 举报
回复
1、在触发器中可以和用户进行交互以及外在参数吗?怎样实现?
比如:在删除一条记录时,让用户选择是否把记录中的某一部分保存到另一个表中;触发器根据程序运行时的一个参数,如FLAG(BOOLEAN)的值进行判断,进而选择执行某种操作。
----------------------------
不行,但是你可以先写将前台的参数写到一个表中,在触发器中从这个表中取得前台的参数。

2、在写一个INSERT以及NSERTUPDATE触发器时,如何判断其中的某个字段是否是nil(字符型)或空值,并把另一个字段的值赋给该字段?
---------------------------
if exists(select 1 from inserted where field1 is null)
update table1 set [Field1]=i.[Field3] from ...
pengdali 2003-10-21
  • 打赏
  • 举报
回复
create trigger del4tabll1
on table1
for delete
as
update tabel2 set field2=deleted.field5,Field1=deleted.field4 from deleted where tabel2.field1=deleted.field1



你的语法没有问题,有什么异常吗?我这里合并了一下。
jxc163 2003-10-21
  • 打赏
  • 举报
回复
多的这个触发器哪里不对呢?

create trigger del4tabll1
on table1
for delete
as
update tabel2 set table2.field2=deleted.field5 from deleted where tabel2.field1=deleted.field1

update tabel2 set table2.Field1=deleted.field4 from deleted where table2.Field1=deleted.Field1
加载更多回复(6)

2,495

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧