SQL Server2000 觸發器
當前位置:點晴教程→知識管理交流
→『 技術文檔交流 』
觸發器是一種特殊的存儲過程,在用戶試圖對指定的表執行指定的數據修改語句時自動執行。創建語法:
引用內容 Create TRIGGER trigger_name ON {table | view} {INSTEAD OF | AFTER} {[Insert] [,] [Update] [,] [Delete]} AS sql_statement 下邊主要說下INSTEAD OF和AFTER兩個參數的區別: ·執行時間:INSTEAD OF在SQL語句執行前觸發,并且SQL語句不會再執行;AFTER則是在SQL語句執行后觸發。 ·適用對象:INSTEAD OF適用于表和視圖;AFTER只能用于表。 ·數量:Insert、Update和Delete允許有多個AFTER觸發器,但只能有一個INSTEAD OF觸發器。 再來說說觸發器中經常會用到的兩張表:inserted和deleted。這兩張表在結構上類似于定義觸發器的表,其中inserted存放的是Insert的記錄或Update后的新記錄,deleted存放的是Delete的記錄或Update前的舊記錄。例如當觸發器中SQL語句的執行條件是判斷新增記錄某個字段值來進行的,那么就得從inserted獲取新增記錄。 示例 程序代碼 /* download表增加一條記錄時更新天預統計表count1 */ Create TRIGGER DownCountTR ON download AFTER Insert AS IF @@rowcount>0 BEGIN DECLARE @date1 datetime --從Inserted表中獲取新下載的時間 Select @date1=convert(nvarchar(10),regtime,120) FROM Inserted --更新count1表 IF exists(Select * FROM count1 Where regtime=@date1) Update count1 SET downcount=downcount+1 Where regtime=@date1 ELSE Insert INTO count1(downcount,regtime) VALUES(1,@date1) END 程序代碼 /* 禁止對表的更新和刪除 */ Create TRIGGER STOP ON dbo.table1 INSTEAD OF Update, Delete AS RETURN 遞歸觸發器 當在 sp_dboption 中啟用 recursive triggers 設置時,SQL Server 還允許觸發器的遞歸調用。遞歸觸發器允許發生兩種類型的遞歸: ·間接遞歸 ·直接遞歸 使用間接遞歸時,應用程序更新表 T1,從而激發觸發器 TR1,該觸發器更新表 T2。在這種情況下,觸發器 T2 將激發并更新 T1。 使用直接遞歸時,應用程序更新表 T1,從而激發觸發器 TR1,該觸發器更新表 T1。由于表 T1 被更新,觸發器 TR1 再次激發,依此類推。 說明 只有啟用 sp_dboption 的 recursive triggers 設置,才會發生上述行為。對于為給定事件定義的多個觸發器,并沒有確定的執行順序。每個觸發器都應是自包含的。禁用 recursive triggers 設置只能禁止直接遞歸。若要也禁用間接遞歸,請使用 sp_configure 將 nested triggers 服務器選項設置為 0。 如果任一觸發器執行了 ROLLBACK TRANSACTION 語句,則無論嵌套級是多少,都不會進一步執行其它觸發器。 嵌套觸發器 觸發器最多可以嵌套 32 層。如果一個觸發器更改了包含另一個觸發器的表,則第二個觸發器將激活,然后該觸發器可以再調用第三個觸發器,依此類推。如果鏈中任意一個觸發器引發了無限循環,則會超出嵌套級限制,從而導致取消觸發器。若要禁用嵌套觸發器,請用 sp_configure 將 nested triggers 選項設置為 0(關閉)。默認配置允許嵌套觸發器。如果嵌套觸發器是關閉的,則也將禁用遞歸觸發器,與 sp_dboption 的 recursive triggers 設置無關。 該文章在 2011/3/14 15:09:04 編輯過 |
關鍵字查詢
相關文章
正在查詢... |