(12) 在SQL Server 2008中,設表T(a, b)上建有如下觸發器:
CREATE TRIGGER tri_update ON T FOR UPDATE AS
IF EXISTS(SELECT * FROM inserted
WHERE b not between 0 and 100)
ROLLBACK
設表T中已有數據:('a01',90),如果執行語句:
UPDATE T SET b = 100 WHERE a = 'a01'
則觸發器臨時工作表及執行完該語句後表T中的數據為()
A.
T表:('a01',100)
INSERTED表:('a01',90)
DELETED表:('a01',100)
B.
T表:('a01',90)
INSERTED表:('a01',90)
DELETED表:('a01',100)
C.
T表:('a01',100)
INSERTED表:('a01',100)
DELETED表:('a01',90)
D.
T表:('a01',90)
INSERTED表:('a01',100)
DELETED表:('a01',90)
敲字不容易呀,麻煩各位大神解答一下,詳細點更好,多謝了
C
用FOR關鍵字定義的觸發器為後觸發型觸發器,即只有在引發觸發器執行的語句中指定的操作都已成功執行,並且所有的約束檢查也成功完成後才執行觸發器。其中INSERTED表用於存儲INSERT和UPDATE語句所影響行的新值的副本,DELETED表用於存儲DELETE和UPDATE語句所影響行的舊值的副本。在執行“UPDATE T SET b=100 WHERE a=ˊa01ˊ”之後,T表為:(ˊa01ˊ,100),INSERTED表內容變為:(ˊa01 ˊ,100),DELETED表內容變為:(ˊa01 ˊ,90)。繼續判斷約束檢查“SELECT*FROM inserted WHERE b not between o and l00”,因為INSERTED表中的b等於l00,因此約束不成立,故觸發器不執行。