在一個觸發器裡面如何判斷觸發器的增刪改操作
但是在效率上沒有分開寫三個觸發器好 ,看不同的需求吧!
如有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 '無效的日期'