程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> sql server 2008-數據庫、觸發器、三級數據庫選擇題,求大神解答

sql server 2008-數據庫、觸發器、三級數據庫選擇題,求大神解答

編輯:編程綜合問答
數據庫、觸發器、三級數據庫選擇題,求大神解答

(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,因此約束不成立,故觸發器不執行。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved