当一个触发器里面同时存在insert,update,delete时,如何按照不同的操作而触发不同的触发器呢?
但是在效率上没有分开写三个触发器好 ,看不同的需求吧!
如有A、B两表。B表中记录取自A表
A:
ID(PK), Name, Sex, Job, Address
B:
ID(PK), Name, Address
代码如下:
create trigger tr_insert_update_delete_A on A
for insert,update,delete
as
if not exists(select * from deleted) --如果是新增
insert B(Name,Address) select Name,Address from inserted
else if not exists(select * from inserted) --如果是删除
delete B from deleted d where B.Name=d.Name
else if(select count(*) from deleted)>0 and (select count(*) from inserted)>0 --如果是更新
update B set Name=i.Name,Address=i.Address
from B,inserted i,deleted d
where i.Name=d.Name and i.Name=b.Name
注意在逻辑虚拟表deleted和inserted在执行批量操作时是多个记录同时存在而不是一条条的循环执行!
自定义错误消息: raiserror( ‘不允许同时更新多条记录的主键值,更新被取消! ‘,1,16)
示例使用 isnumeric 返回所有非数值的数据行。
select * from CDS_Guest
where isnumeric(name)=0;
示例使用 isdate 测试某一字符串是否是有效的 datetime。
if isdate(‘2009-05-12 10:19:41.177‘)=0
print ‘有效的日期‘
else
print ‘无效的日期‘