关于触发器的问题 ( 积分: 30 )

  • 主题发起人 主题发起人 santu
  • 开始时间 开始时间
S

santu

Unregistered / Unconfirmed
GUEST, unregistred user!
对于触发器,能否满足如下要求,该如何实现:
我们定义两张简单的表结构
Table1(cname varchar(20),iQty int)
Table2(cname varchar(20),iQty int)
定义触发器如下:
CREATE TRIGGER triggerTable1 ON [dbo].[Table1]
FOR INSERT
AS
insert into Table2
select * from inserted
1.对表Table1做新增操作的时候,如何获得triggerTable1是否成功执行
(由于这个触发器只是举例说明,实际触发器要操作的表或执行的内容比较多,有没有通用的方法,如获得触发器返回的变量来判断)
2.如果没有执行成功,如何获取抛出的异常,变量是什么?谢谢
 
不知道,没有注意,觉得应该会成功,帮你顶吧
 
谢谢,基本上都是会成功的,可是,不成功的几率非常小但我遇到,只要有,我们就要把它防住。
 
应该会成功的.
我给你个抛出异常的例子吧,大体上差不多,你看看...
create trigger tD_Inv_QTCKMaster on Inv_QTCKMaster for DELETE as
begin
declare @errno int,
@errmsg varchar(255)
if exists(select * from deleted,Inv_QTCKDetail
where Inv_QTCKDetail.CompanyCode = deleted.CompanyCode and Inv_QTCKDetail.BillNo = deleted.BillNo )
begin
select @errno = 30001,
@errmsg = 'Cannot DELETE Inv_QTCKMaster because Inv_QTCKDetail exists.'

end
return
error:
raiserror @errno @errmsg
rollback transaction
end
 
CREATE TRIGGER triggerTable1 ON [dbo].[Table1]
FOR INSERT
AS
begin
insert into Table2
select * from inserted
IF @@error <>0 ROLLBACK TRANSACTION
end
这样写第一个表的操作和触发器操作时同步的,要么都操作成功,要么都失败。
至于操作失败的提示可以自定义,然后用RAISERROR的形式提示用户;
系统操作失败的提示系统会自带的,你也可以根据上面的@@error的值对应系统表sysmessages字段error的值查询得到。
 

Similar threads

D
回复
0
查看
928
DelphiTeacher的专栏
D
D
回复
0
查看
883
DelphiTeacher的专栏
D
D
回复
0
查看
856
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部