程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> 其他數據庫知識 >> MSSQL >> SQL SERVER中各類觸發器的完全語法及參數解釋

SQL SERVER中各類觸發器的完全語法及參數解釋

編輯:MSSQL

SQL SERVER中各類觸發器的完全語法及參數解釋。本站提示廣大學習愛好者:(SQL SERVER中各類觸發器的完全語法及參數解釋)文章只能為提供參考,不一定能成為您想要的結果。以下是SQL SERVER中各類觸發器的完全語法及參數解釋正文


語法:

Trigger on an INSERT, UPDATE, or DELETE statement to a table or view (DML Trigger)
CREATE TRIGGER [ schema_name . ]trigger_name 
ON { table | view } 
[ WITH <dml_trigger_option> [ ,...n ] ]
{ FOR | AFTER | INSTEAD OF } 
{ [ INSERT ] [ , ] [ UPDATE ] [ , ] [ DELETE ] } 
[ WITH APPEND ] 
[ NOT FOR REPLICATION ] 
AS { sql_statement [ ; ] [ ,...n ] | EXTERNAL NAME <method specifier [ ; ] > }

<dml_trigger_option> ::=
  [ ENCRYPTION ]
  [ 
EXECUTE AS Clause ]

<method_specifier> ::=
  assembly_name.class_name.method_name


Trigger on a CREATE, ALTER, DROP, GRANT, DENY, REVOKE, or UPDATE STATISTICS statement (DDL Trigger)
CREATE TRIGGER trigger_name 
ON { ALL SERVER | DATABASE } 
[ WITH <ddl_trigger_option> [ ,...n ] ]
{ FOR | AFTER } { event_type | event_group } [ ,...n ]
AS { sql_statement [ ; ] [ ,...n ] | EXTERNAL NAME < method specifier > [ ; ] }

<ddl_trigger_option> ::=
  [ ENCRYPTION ]
  [ EXECUTE AS Clause ]

<method_specifier> ::=
  assembly_name.class_name.method_name


Trigger on a LOGON event (Logon Trigger)
CREATE TRIGGER trigger_name 
ON ALL SERVER 
[ WITH <logon_trigger_option> [ ,...n ] ]
{ FOR| AFTER } LOGON 
AS { sql_statement [ ; ] [ ,...n ] | EXTERNAL NAME < method specifier > [ ; ] }
<logon_trigger_option> ::=
  [ ENCRYPTION ]
  [ EXECUTE AS Clause ]

<method_specifier> ::=
  assembly_name.class_name.method_name

 參數:

schema_name

DML 觸發器所屬架構的稱號。DML 觸發器的感化域是為其創立該觸發器的表或視圖的架構。關於 DDL 或登錄觸發器,沒法指定 schema_name。

trigger_name

觸發器的稱號。trigger_name 必需遵守 標識符規矩,但 trigger_name 不克不及以 # 或 ## 開首。

table | view

對其履行 DML 觸發器的表或視圖,有時稱為觸發器表或觸發器視圖。可以依據須要指定表或視圖的完整限制稱號。視圖只能被 INSTEAD OF 觸發器援用。不克不及對部分或全局暫時表界說 DML 觸發器。

DATABASE

將 DDL 觸發器的感化域運用於以後數據庫。假如指定了此參數,則只需以後數據庫中湧現 event_type或 event_group,就會激起該觸發器。

ALL SERVER

將 DDL 或登錄觸發器的感化域運用於以後辦事器。假如指定了此參數,則只需以後辦事器中的任何地位上湧現 event_type 或 event_group,就會激起該觸發器。

WITH ENCRYPTION

對 CREATE TRIGGER 語句的文本停止隱約處置。應用 WITH ENCRYPTION 可以避免將觸發器作為 SQL Server 復制的一部門停止宣布。不克不及為 CLR 觸發器指定 WITH ENCRYPTION。

EXECUTE AS

指定用於履行該觸發器的平安高低文。許可您掌握 SQL Server 實例用於驗證被觸發器援用的隨意率性數據庫對象的權限的用戶帳戶。

FOR | AFTER

AFTER 指定 DML 觸發器僅在觸發 SQL 語句中指定的一切操作都已勝利履行時才被觸發。一切的援用級聯操作和束縛檢討也必需在激起此觸發器之前勝利完成。

假如僅指定 FOR 症結字,則 AFTER 為默許值。

不克不及對視圖界說 AFTER 觸發器。

INSTEAD OF

指定履行 DML 觸發器而不是觸發 SQL 語句,是以,其優先級高於觸發語句的操作。不克不及為 DDL 或登錄觸發器指定 INSTEAD OF。

關於表或視圖,每一個 INSERT、UPDATE 或 DELETE 語句最多可界說一個 INSTEAD OF 觸發器。然則,可認為具有本身的 INSTEAD OF 觸發器的多個視圖界說視圖。

INSTEAD OF 觸發器弗成以用於應用 WITH CHECK OPTION 的可更新視圖。假如將 INSTEAD OF 觸發器添加到指定了 WITH CHECK OPTION 的可更新視圖中,則 SQL Server 將激發毛病。用戶須用 ALTER VIEW 刪除該選項後能力界說 INSTEAD OF 觸發器。

{ [DELETE] [,] [INSERT] [,] [UPDATE] }

指定命據修正語句,這些語句可在 DML 觸發器對此表或視圖停止測驗考試時激該死觸發器。必需至多指定一個選項。在觸發器界說中許可應用上述選項的隨意率性次序組合。

關於 INSTEAD OF 觸發器,不許可對具有指定級聯操作 ON DELETE 的援用關系的表應用 DELETE 選項。異樣,也不許可對具有指定級聯操作 ON UPDATE 的援用關系的表應用 UPDATE 選項。

event_type

履行以後將招致激起 DDL 觸發器的 Transact-SQL 說話事宜的稱號。DDL 事宜中列出了 DDL 觸發器的有用事宜。

event_group

預界說的 Transact-SQL 說話事宜分組的稱號。履行任何屬於 event_group 的 Transact-SQL 說話事宜以後,都將激起 DDL 觸發器。DDL 事宜組中列出了 DDL 觸發器的有用事宜組。

CREATE TRIGGER 運轉終了以後,event_group 還可經由過程將其涵蓋的事宜類型添加到sys.trigger_events 目次視圖中來作為宏應用。

WITH APPEND

指定應當再添加一個現有類型的觸發器。僅當兼容級別等於或低於 65 時,才須要應用此可選子句。假如兼容級別等於或高於 70,則不須要應用 WITH APPEND 子句來添加現有類型的其他觸發器。這是兼容級別設置等於或高於 70 的 CREATE TRIGGER 的默許行動。WITH APPEND 不克不及與 INSTEAD OF 觸發器一路應用。假如顯式聲清楚明了 AFTER 觸發器,則也不克不及應用該子句。僅當為了向後兼容而指定了 FOR 時(但沒有 INSTEAD OF 或 AFTER)時,能力應用 WITH APPEND。假如指定了 EXTERNAL NAME(即觸發器為 CLR 觸發器),則不克不及指定 WITH APPEND。

NOT FOR REPLICATION

指導當復制署理修正觸及到觸發器的表時,不該履行觸發器。有關具體信息,請參閱應用 NOT FOR REPLICATION 來掌握束縛、標識和觸發器。

sql_statement

觸發前提和操作。觸發器前提指定其他尺度,用於肯定測驗考試的 DML、DDL 或 logon 事宜能否招致履行觸發器操作。

測驗考試上述操作時,將履行 Transact-SQL 語句中指定的觸發器操作。

觸發器可以包括隨意率性數目和品種的 Transact-SQL 語句,但也有破例。觸發器的用處是依據數據修正或界說語句來檢討或更改數據;它不該向用戶前往數據。觸發器中的 Transact-SQL 語句經常包括掌握流說話。

DML 觸發器應用 deleted 和 inserted 邏輯(概念)表。它們在構造上相似於界說了觸發器的表,即對其測驗考試履行了用戶操作的表。在 deleted 和 inserted 表保留了能夠會被用戶更改的行的舊值或新值。例如,若要檢索 deleted 表中的一切值,則應用:

SELECT *
FROM deleted 

DDL 和登錄觸發器經由過程應用 EVENTDATA (Transact-SQL) 函數來獲得有關觸發事宜的信息。

DELETE、INSERT 或 UPDATE 觸發器中,假如兼容級別設置為 70,則 SQL Server 不許可在 inserted和 deleted 表中存在 text、ntext 或 image 列援用。不克不及拜訪 inserted 和 deleted 表中的text、ntext 和 image 值。若要在 INSERT 或 UPDATE 觸發器中檢索新值,請將 inserted 表與原始更新表聯接。假如兼容級別等於或低於 65,則將為 inserted 或 deleted 的文本、ntext 或許許可 Null 值的 image 列前往 Null 值;假如列不克不及為 Null,則前往零長度的字符串。

假如兼容級別等於或高於 80,SQL Server 將許可經由過程表或視圖的 INSTEAD OF 觸發器來更新text、ntext 或 image 列。 

< method_specifier>

關於 CLR 觸發器,指定法式集與觸發器綁定的辦法。該辦法不克不及帶有任何參數,而且必需前往空值。class_name 必需是有用的 SQL Server 標識符,而且該類必需存在於可見法式集中。假如該類有一個應用“.”來分隔定名空間部門的定名空間限制稱號,則類名必需用 [] 或“ ”分隔符分隔。該類不克不及為嵌套類。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved