指定第一個或最后一個激發(fā)的、與表關(guān)聯(lián)的 AFTER 觸發(fā)器。在第一個和最后一個觸發(fā)器之間激發(fā)的 AFTER 觸發(fā)器將按未定義的順序執(zhí)行。
sp_settriggerorder[@triggername = ] 'triggername'
, [@order = ] 'value'
, [@stmttype = ] 'statement_type'
[@triggername =] 'triggername'
是將要設(shè)置或更改順序的觸發(fā)器的名稱。triggername 的數(shù)據(jù)類型為 sysname。如果此名稱與觸發(fā)器不對應(yīng)或此名稱對應(yīng)于 INSTEAD OF 觸發(fā)器,該過程將返回錯誤。
[@order =] 'value'
是新觸發(fā)器順序的設(shè)置。value 的數(shù)據(jù)類型為 varchar(10),可以是下列值中的任何一個。
重要 First 和 Last 觸發(fā)器必須是兩個不同的觸發(fā)器。
值 | 描述 |
---|---|
First | 最先激發(fā)的觸發(fā)器。 |
Last | 最后激發(fā)的觸發(fā)器。 |
None | 以未定義的順序激發(fā)的觸發(fā)器。 |
[@stmttype = ] 'statement_type'
指定哪條 SQL 語句激發(fā)觸發(fā)器。statement_type 的數(shù)據(jù)類型為 varchar(10),可以是 INSERT、UPDATE 或 DELETE。只有在觸發(fā)器已經(jīng)定義為某種語句類型的觸發(fā)器后,才能將其指派為該語句類型的 First 或 Last 觸發(fā)器。例如,如果 TR1 定義為 INSERT 觸發(fā)器,則可以將表 T1 上的 INSERT 觸發(fā)器 TR1 指派為 First 觸發(fā)器。如果將只定義為 INSERT 觸發(fā)器的 TR1 設(shè)置為 UPDATE 語句的 First(或 Last)觸發(fā)器,則 SQL Server 將返回錯誤信息。有關(guān)更多信息,請參見注釋部分。
0(成功)或 1(失敗)
單個表上的每個 INSERT、UPDATE 或 DELETE 語句只能有一個 First 和一個 Last 觸發(fā)器。
如果在表上已定義了 First 觸發(fā)器,則不能指派新觸發(fā)器作為同一操作(INSERT、UPDATE 或 DELETE)的同一表的 First 觸發(fā)器。此限制也適用于 Last 觸發(fā)器。
作為 SQL Server 復(fù)制的一部分,可在已發(fā)布表上指派 First 觸發(fā)器;然而,如果與用戶定義的觸發(fā)器存在沖突,則必須在表發(fā)布之前將用戶定義觸發(fā)器的指派更改為 None。
如果 ALTER TRIGGER 語句更改第一個或最后一個觸發(fā)器,則除去最初在觸發(fā)器上設(shè)置的 First 或 Last 特性,并且替換為 None。順序值必須用 sp_settriggerorder 重新設(shè)置。
如果必須將同一觸發(fā)器指派為多個語句類型的第一個或最后一個順序,則必須為每個語句類型執(zhí)行 sp_settriggerorder。而且,在可以將觸發(fā)器指派為某個語句類型激發(fā)的 First 或 Last 觸發(fā)器之前,必須先將其定義為該語句類型。
觸發(fā)器所有者以及在其上定義觸發(fā)器的表所有者擁有 sp_settriggerorder 的執(zhí)行許可權(quán)限。當(dāng)前數(shù)據(jù)庫中的 db_owner 和 db_ddladmin 角色成員以及 sysadmin 服務(wù)器角色成員可以執(zhí)行該存儲過程。
sp_settriggerorder @triggername= 'MyTrigger', @order='first', @stmttype = 'UPDATE'