觸發器,觸發器執行個體
雖然接觸過觸發器,可是卻不太深入,有的時候碰到還是照樣不太理解,現在將這一塊空白補上。
觸發器內容基本上如下:
值得注意的一點是:在觸發器被執行時,系統會建立一個或者兩個暫存資料表Inserted和Deleted。使用者儲存使用者更改行的新值和舊值。對於insert操作只會產生Inserted表,儲存新插入的每條資料;對於delete操作,只會產生Deleted表,儲存被刪除的每條資料;對於update操作會同時產生Inserted表和Deleted表,Deleted表中存放的是更新之前的資料,Inserted表中存放的是更新之後的資料。觸發器中可以直接使用這兩張表。
下面舉個具體的例子來說明一下:
以FOR觸發器為例:
對於login表,原來資料如下:
觸發器的編寫過程如下:
執行如下語句和得到的結果如所示:
通過上面兩個結果的對比,SQL語句將使用者身份由管理員->操作員,for觸發器改變了使用者密碼,由123->lj。就是這樣一個過程。
sql 觸發器 update的問題
使用更新什麼欄位才執行觸發器就行了
CREATE TRIGGER GXDHSL ON RKD
FOR UPDATE
AS
IF(Update(欄位名))
begin
DECLARE @DHDH VARCHAR(50) --計劃單號
DECLARE @SL decimal(18,6) --修改前數量
DECLARE @DHSL decimal(18,6) --修改後數量
SELECT @DHDH=ysdh,@SL=SSSL FROM DELETED
SELECT @DHSL=SSSL FROM INSERTED
UPDATE GL_QGD SET DHSL=DHSL-ISNULL(@SL,0) WHERE DH=@DHDH
end
go
sql 觸發器 update的問題
使用更新什麼欄位才執行觸發器就行了
CREATE TRIGGER GXDHSL ON RKD
FOR UPDATE
AS
IF(Update(欄位名))
begin
DECLARE @DHDH VARCHAR(50) --計劃單號
DECLARE @SL decimal(18,6) --修改前數量
DECLARE @DHSL decimal(18,6) --修改後數量
SELECT @DHDH=ysdh,@SL=SSSL FROM DELETED
SELECT @DHSL=SSSL FROM INSERTED
UPDATE GL_QGD SET DHSL=DHSL-ISNULL(@SL,0) WHERE DH=@DHDH
end
go