sql觸發器變數
A. SQL中的「觸發器」是什麼
觸發器是對表進行插入、更新、刪除的時候會自動執行的特殊存儲過程。x0dx0ax0dx0a觸發器一般用在check約束更加復雜的約束上面。例如在執行update、insert、delete這些操作的時候,系統會自動調用執行該表上對應的觸發器。x0dx0ax0dx0aSQL Server 2005中觸發器可以分為兩類:DML觸發器和DDL觸發器,其中DDL觸發器它們會影響多種數據定義語言語句而激發,這些語句有create、alter、drop語句。 x0dx0ax0dx0a DML觸發器分為: x0dx0a 1、 after觸發器(之後觸發) x0dx0a a、 insert觸發器 x0dx0a b、 update觸發器 x0dx0a c、 delete觸發器 x0dx0a 2、 instead of 觸發器 (之前觸發) x0dx0ax0dx0a其中after觸發器要求只有執行某一操作insert、update、delete之後觸發器才被觸發,且只能定義在表上。而instead of觸發器表示並不執行其定義的操作(insert、update、delete)而僅是執行觸發器本身。既可以在表上定義instead of觸發器,也可以在視圖上定義。 x0dx0ax0dx0a觸發器有兩個特殊的表:插入表(instered表)和刪除表(deleted表)。這兩張是邏輯表也是虛表。有系統在內存中創建者兩張表,不會存儲在資料庫中。而且兩張表的都是只讀的,只能讀取數據而不能修改數據。這兩張表的結果總是與被改觸發器應用的表的結構相同。當觸發器完成工作後,這兩張表就會被刪除。Inserted表的數據是插入或是修改後的數據,而deleted表的數據是更新前的或是刪除的數據。x0dx0ax0dx0aUpdate數據的時候就是先刪除表記錄,然後增加一條記錄。這樣在inserted和deleted表就都有update後的數據記錄了。注意的是:觸發器本身就是一個事務,所以在觸發器裡面可以對修改數據進行一些特殊的檢查。如果不滿足可以利用事務回滾,撤銷操作。
B. SQL觸發器中怎麼給變數賦值
declare @Cnumber int;----銷售商品的數量
declare @Cid varchar(50);----庫存裡面商品的ID
--給需要減少的商品的數量賦一個初始值,確保在重新賦值時不會出錯
SET @Cnumber = 0
--給商品的編號賦賦一個初始值
SET @Cid = '1'
--如果不賦個初始值,在從inserted中獲取並賦值時會出現值為NULL的情況
--獲取需要減少的商品的數量和商品的編號
SELECT @Cnumber = Cnumber,@Cid = Cid FROM inserted
--接下來的更新操作就是按照你原來的去更新就行了
update Commodity---商品庫存 set Cnumber=Cnumber-@Cnumber where Cid=@Cid
--也可以這樣更新
UPDATE Commodity SET Cnumber = Cnumber - Cnumber
FROM
Commodity AS T
INNER JOIN
inserted AS T1
ON
T.Cid = T1.Cid
--這樣可以批量更新,那麼針對一條數據進行更新是沒問題的,同事也省去了聲明變數一級變數賦值的步驟