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

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

 當一個觸發器裡面同時存在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 '無效的日期'