1. 程式人生 > >在一個觸發器裏面如何判斷觸發器的增刪改操作

在一個觸發器裏面如何判斷觸發器的增刪改操作

count 分開 nbsp tle etime create 判斷 更新 date

當一個觸發器裏面同時存在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;
Go
示例使用 isdate 測試某一字符串是否是有效的 datetime。

if isdate(‘2009-05-12 10:19:41.177‘)=0
print ‘有效的日期‘
else
print ‘無效的日期‘

在一個觸發器裏面如何判斷觸發器的增刪改操作