關(guān)于sql觸發(fā)器語(yǔ)句,sql觸發(fā)器的使用及語(yǔ)法這個(gè)問(wèn)題很多朋友還不知道,今天小六來(lái)為大家解答以上的問(wèn)題,現(xiàn)在讓我們一起來(lái)看看吧!
1、CREATE TRIGGER 創(chuàng)建觸發(fā)器,觸發(fā)器是一種特殊的存儲(chǔ)過(guò)程,在用戶試圖對(duì)指定的表執(zhí)行指定的數(shù)據(jù)修改語(yǔ)句時(shí)自動(dòng)執(zhí)行。
2、Microsoft? SQL Server? 允許為任何給定的 INSERT、UPDATE 或 DELETE 語(yǔ)句創(chuàng)建多個(gè)觸發(fā)器。
3、 語(yǔ)法 CREATE TRIGGER trigger_name ON { table | view } [ WITH ENCRYPTION ] { { { FOR | AFTER | INSTEAD OF } { [ INSERT ] [ , ] [ UPDATE ] } [ WITH APPEND ] [ NOT FOR REPLICATION ] AS [ { IF UPDATE ( column ) [ { AND | OR } UPDATE ( column ) ] [ ...n ] | IF ( COLUMNS_UPDATED ( ) { bitwise_operator } updated_bitmask ) { comparison_operator } column_bitmask [ ...n ] } ] sql_statement [ ...n ] } } 參數(shù) trigger_name 是觸發(fā)器的名稱。
4、觸發(fā)器名稱必須符合標(biāo)識(shí)符規(guī)則,并且在數(shù)據(jù)庫(kù)中必須唯一。
5、可以選擇是否指定觸發(fā)器所有者名稱。
6、 Table | view 是在其上執(zhí)行觸發(fā)器的表或視圖,有時(shí)稱為觸發(fā)器表或觸發(fā)器視圖。
7、可以選擇是否指定表或視圖的所有者名稱。
8、 WITH ENCRYPTION 加密 syscomments 表中包含 CREATE TRIGGER 語(yǔ)句文本的條目。
9、使用 WITH ENCRYPTION 可防止將觸發(fā)器作為 SQL Server 復(fù)制的一部分發(fā)布。
10、 AFTER 指定觸發(fā)器只有在觸發(fā) SQL 語(yǔ)句中指定的所有操作都已成功執(zhí)行后才激發(fā)。
11、所有的引用級(jí)聯(lián)操作和約束檢查也必須成功完成后,才能執(zhí)行此觸發(fā)器。
12、 如果僅指定 FOR 關(guān)鍵字,則 AFTER 是默認(rèn)設(shè)置。
13、 不能在視圖上定義 AFTER 觸發(fā)器。
14、 INSTEAD OF 指定執(zhí)行觸發(fā)器而不是執(zhí)行觸發(fā) SQL 語(yǔ)句,從而替代觸發(fā)語(yǔ)句的操作。
15、 在表或視圖上,每個(gè) INSERT、UPDATE 或 DELETE 語(yǔ)句最多可以定義一個(gè) INSTEAD OF 觸發(fā)器。
16、然而,可以在每個(gè)具有 INSTEAD OF 觸發(fā)器的視圖上定義視圖。
17、 INSTEAD OF 觸發(fā)器不能在 WITH CHECK OPTION 的可更新視圖上定義。
18、如果向指定了 WITH CHECK OPTION 選項(xiàng)的可更新視圖添加 INSTEAD OF 觸發(fā)器,SQL Server 將產(chǎn)生一個(gè)錯(cuò)誤。
19、用戶必須用 ALTER VIEW 刪除該選項(xiàng)后才能定義 INSTEAD OF 觸發(fā)器。
20、 { [DELETE] [,] [INSERT] [,] [UPDATE] } 是指定在表或視圖上執(zhí)行哪些數(shù)據(jù)修改語(yǔ)句時(shí)將激活觸發(fā)器的關(guān)鍵字。
21、必須至少指定一個(gè)選項(xiàng)。
22、在觸發(fā)器定義中允許使用以任意順序組合的這些關(guān)鍵字。
23、如果指定的選項(xiàng)多于一個(gè),需用逗號(hào)分隔這些選項(xiàng)。
24、 對(duì)于 INSTEAD OF 觸發(fā)器,不允許在具有 ON DELETE 級(jí)聯(lián)操作引用關(guān)系的表上使用 DELETE 選項(xiàng)。
25、同樣,也不允許在具有 ON UPDATE 級(jí)聯(lián)操作引用關(guān)系的表上使用 UPDATE 選項(xiàng)。
26、 WITH APPEND 指定應(yīng)該添加現(xiàn)有類型的其它觸發(fā)器。
27、只有當(dāng)兼容級(jí)別是 65 或更低時(shí),才需要使用該可選子句。
28、如果兼容級(jí)別是 70 或更高,則不必使用 WITH APPEND 子句添加現(xiàn)有類型的其它觸發(fā)器(這是兼容級(jí)別設(shè)置為 70 或更高的 CREATE TRIGGER 的默認(rèn)行為)。
29、有關(guān)更多信息,請(qǐng)參見 sp_dbcmptlevel。
30、 WITH APPEND 不能與 INSTEAD OF 觸發(fā)器一起使用,或者,如果顯式聲明 AFTER 觸發(fā)器,也不能使用該子句。
31、只有當(dāng)出于向后兼容而指定 FOR 時(shí)(沒(méi)有 INSTEAD OF 或 AFTER),才能使用 WITH APPEND。
32、以后的版本將不支持 WITH APPEND 和 FOR(將被解釋為 AFTER)。
33、 NOT FOR REPLICATION 表示當(dāng)復(fù)制進(jìn)程更改觸發(fā)器所涉及的表時(shí),不應(yīng)執(zhí)行該觸發(fā)器。
34、 AS 是觸發(fā)器要執(zhí)行的操作。
35、 sql_statement 是觸發(fā)器的條件和操作。
36、觸發(fā)器條件指定其它準(zhǔn)則,以確定 DELETE、INSERT 或 UPDATE 語(yǔ)句是否導(dǎo)致執(zhí)行觸發(fā)器操作。
37、 當(dāng)嘗試 DELETE、INSERT 或 UPDATE 操作時(shí),Transact-SQL語(yǔ)句中指定的觸發(fā)器操作將生效。
38、 觸發(fā)器可以包含任意數(shù)量和種類的 Transact-SQL 語(yǔ)句。
39、觸發(fā)器旨在根據(jù)數(shù)據(jù)修改語(yǔ)句檢查或更改數(shù)據(jù);它不應(yīng)將數(shù)據(jù)返回給用戶。
40、觸發(fā)器中的 Transact-SQL 語(yǔ)句常常包含控制流語(yǔ)言。
41、CREATE TRIGGER 語(yǔ)句中使用幾個(gè)特殊的表: deleted 和 inserted 是邏輯(概念)表。
42、這些表在結(jié)構(gòu)上類似于定義觸發(fā)器的表(也就是在其中嘗試用戶操作的表);這些表用于保存用戶操作可能更改的行的舊值或新值。
43、例如,若要檢索 deleted 表中的所有值,請(qǐng)使用: SELECT * FROM deleted 如果兼容級(jí)別等于 70,那么在 DELETE、INSERT 或 UPDATE 觸發(fā)器中,SQL Server 將不允許引用 inserted 和 deleted 表中的 text、ntext 或 image 列。
44、不能訪問(wèn) inserted 和 deleted 表中的 text、ntext 和 image 值。
45、若要在 INSERT 或 UPDATE 觸發(fā)器中檢索新值,請(qǐng)將 inserted 表與原始更新表聯(lián)接。
46、當(dāng)兼容級(jí)別是 65 或更低時(shí),對(duì) inserted 或 deleted 表中允許空值的text、ntext 或 image 列,將返回空值;如果這些列不可為空,則返回零長(zhǎng)度字符串。
47、 當(dāng)兼容級(jí)別是 80 或更高時(shí),SQL Server 允許在表或視圖上通過(guò) INSTEAD OF 觸發(fā)器更新 text、ntext 或 image 列。
48、 n 是表示觸發(fā)器中可以包含多條 Transact-SQL 語(yǔ)句的占位符。
49、對(duì)于 IF UPDATE (column) 語(yǔ)句,可以通過(guò)重復(fù) UPDATE (column) 子句包含多列。
50、 IF UPDATE (column) 測(cè)試在指定的列上進(jìn)行的 INSERT 或 UPDATE 操作,不能用于 DELETE 操作。
51、可以指定多列。
52、因?yàn)樵?ON 子句中指定了表名,所以在 IF UPDATE 子句中的列名前不要包含表名。
53、若要測(cè)試在多個(gè)列上進(jìn)行的 INSERT 或 UPDATE 操作,請(qǐng)?jiān)诘谝粋€(gè)操作后指定單獨(dú)的 UPDATE(column) 子句。
54、在 INSERT 操作中 IF UPDATE 將返回 TRUE 值,因?yàn)檫@些列插入了顯式值或隱性 (NULL) 值。
55、 說(shuō)明 IF UPDATE (column) 子句的功能等同于 IF、IF...ELSE 或 WHILE 語(yǔ)句,并且可以使用 BEGIN...END 語(yǔ)句塊。
56、有關(guān)更多信息,請(qǐng)參見控制流語(yǔ)言。
57、 可以在觸發(fā)器主體中的任意位置使用 UPDATE (column)。
58、 column 是要測(cè)試 INSERT 或 UPDATE 操作的列名。
59、該列可以是 SQL Server 支持的任何數(shù)據(jù)類型。
60、但是,計(jì)算列不能用于該環(huán)境中。
61、有關(guān)更多信息,請(qǐng)參見數(shù)據(jù)類型。
本文分享完畢,希望對(duì)大家有所幫助。
標(biāo)簽:
免責(zé)聲明:本文由用戶上傳,如有侵權(quán)請(qǐng)聯(lián)系刪除!