在SQLSERVER企业管理器中如何创建触发器
生活随笔
收集整理的這篇文章主要介紹了
在SQLSERVER企业管理器中如何创建触发器
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
下面將分別介紹在MS SQLServer 中如何用SQL Server 管理工具Enterprise Manager 和Transaction_SQL 來(lái)創(chuàng)建觸發(fā)器。
在創(chuàng)建觸發(fā)器以前必須考慮到以下幾個(gè)方面:
CREATE TRIGGER 語(yǔ)句必須是批處理的第一個(gè)語(yǔ)句;
表的所有者具有創(chuàng)建觸發(fā)器的缺省權(quán)限,表的所有者不能把該權(quán)限傳給其它用戶;
觸發(fā)器是數(shù)據(jù)庫(kù)對(duì)象,所以其命名必須符合命名規(guī)則;
盡管在觸發(fā)器的SQL 語(yǔ)句中可以參照其它數(shù)據(jù)庫(kù)中的對(duì)象,但是,觸發(fā)器只能創(chuàng)建在當(dāng)前數(shù)據(jù)庫(kù)中;
雖然觸發(fā)器可以參照視圖或臨時(shí)表,但不能在視圖或臨時(shí)表上創(chuàng)建觸發(fā)器,而只能在基表或在創(chuàng)建視圖的表上創(chuàng)建觸發(fā)器;
一個(gè)觸發(fā)器只能對(duì)應(yīng)一個(gè)表,這是由觸發(fā)器的機(jī)制決定的;
盡管TRUNCATE TABLE 語(yǔ)句如同沒(méi)有WHERE 從句的delete 語(yǔ)句,但是由于TRUNCATE TABLE 語(yǔ)句沒(méi)有被記入日志,所以該語(yǔ)句不能觸發(fā)delete 型觸發(fā)器;
WRITETEXT 語(yǔ)句不能觸發(fā)INSERT 或update 型的觸發(fā)器。
當(dāng)創(chuàng)建一個(gè)觸發(fā)器時(shí),必須指定觸發(fā)器的名字,在哪一個(gè)表上定義觸發(fā)器,激活觸發(fā) 器的修改語(yǔ)句,如INSERT、 delete、 update。 當(dāng)然兩個(gè)或三個(gè)不同的修改語(yǔ)句也可 以都觸發(fā)同一個(gè)觸發(fā)器,如INSERT 和update 語(yǔ)句都能激活同一個(gè)觸發(fā)器。
?
用管理工具Enterprise Manger 創(chuàng)建觸發(fā)器
其操作步驟如下:
啟動(dòng)Enterprise Manger, 登錄到指定的服務(wù)器上。
展開(kāi)數(shù)據(jù)庫(kù),然后展開(kāi)要在其上創(chuàng)建觸發(fā)器的表所在的數(shù)據(jù)庫(kù),然后單擊該表。
右擊鼠標(biāo),在彈出菜單中選擇ALL Tasks, 然后單擊Manage Triggers…。
如下圖:
??
在名字框中選擇new, 在文本框中輸入觸發(fā)器文本,如下圖 所示。 單擊Check Syntax 檢查語(yǔ)句是否正確。
單擊Apply, 在Name 下拉列表中會(huì)有新創(chuàng)建的觸發(fā)器名字。
單擊OK, 關(guān)閉窗口創(chuàng)建成功。 創(chuàng)建觸發(fā)器語(yǔ)法如下:
CREATE TRIGGER [trigger_name] ON [dbo].[Table
]
FOR INSERT, update, delete
AS
Sql_statement 各參數(shù)的說(shuō)明如下:
·trigger_name
是用戶要?jiǎng)?chuàng)建的觸發(fā)器的名字觸發(fā)器的名字,必須符合MS SQL Server 的命名規(guī)則,且其名字在當(dāng)前數(shù)據(jù)庫(kù)中必須是惟一的。
·Table
是與用戶創(chuàng)建的觸發(fā)器相關(guān)聯(lián)的表的名字,并且該表已經(jīng)存在。
·WITH ENCRYPTION
表示對(duì)包含有CREATE TRIGGER 文本的syscomments 表進(jìn)行加密。
·AFTER
表示只有在執(zhí)行了指定的操作(INSERT、 delete、 update)之后觸發(fā)器才被激活,執(zhí)行觸發(fā)器中的SQL 語(yǔ)句。若使用關(guān)鍵字FOR, 則表示為AFTER 觸發(fā)器,且該類(lèi)型觸發(fā)器僅能在表上創(chuàng)建。
·INSTEAD OF
請(qǐng)參看“12.8 INSTEAD OF 觸發(fā)器”
[delete] [,] [INSERT] [,] [update]
關(guān)鍵字用來(lái)指明哪種數(shù)據(jù)操作將激活觸發(fā)器。至少要指明一個(gè)選項(xiàng),在觸發(fā)器的定義中三者的順序不受限制,且各選項(xiàng)要用逗號(hào)隔開(kāi)。
·WITH APPEND
表明增加另外一個(gè)已存在某一類(lèi)型觸發(fā)器。只有在兼容性水平(指某一數(shù)據(jù)庫(kù)行為與以前版本的MS SQL Server 兼容程度)不大于65 時(shí)才使用該選項(xiàng)。
·NOT FOR REPLICATION
表明當(dāng)復(fù)制處理修改與觸發(fā)器相關(guān)聯(lián)的表時(shí),觸發(fā)器不能被執(zhí)行。
·AS
是觸發(fā)器將要執(zhí)行的動(dòng)作。
? ·Sql_statement
是包含在觸發(fā)器中的條件語(yǔ)句或處理語(yǔ)句。觸發(fā)器的條件語(yǔ)句定義了另外的標(biāo)準(zhǔn)來(lái)決定將被執(zhí)行的INSERT、 delete、 update 語(yǔ)句是否激活觸發(fā)器。
? ·IF update (column)
用來(lái)測(cè)定對(duì)某一確定列是插入操作還是更新操作,但不與刪除操作用在一起。
·IF (COLUMNS_updateD())
僅在INSERT 和update 類(lèi)型的觸發(fā)器中使用,用其來(lái)檢查所涉及的列是被更新還是被插入。
? ·Bitwise_operatorj
是在比較中使用的位邏輯運(yùn)算符。
? ·Pdated_bitmask
是那些被更新或插入的列的整形位掩碼。例如,如果表T 包括C1, C2, C3, C4, C5五列。為了確定是否只有C2 列被修改,可用2 來(lái)做位掩碼,如果想確定是否C1, C2, C3,C4 都被修改,可用14 來(lái)做位掩碼。
·Comparison_operator
是一比較操作符用“= ”表示檢查在updated_bitmask 中定義的所有列是否都被更新,用“>” 表示檢查是否在updated_bitmask 中定義的某些列被更新。
在創(chuàng)建觸發(fā)器以前必須考慮到以下幾個(gè)方面:
CREATE TRIGGER 語(yǔ)句必須是批處理的第一個(gè)語(yǔ)句;
表的所有者具有創(chuàng)建觸發(fā)器的缺省權(quán)限,表的所有者不能把該權(quán)限傳給其它用戶;
觸發(fā)器是數(shù)據(jù)庫(kù)對(duì)象,所以其命名必須符合命名規(guī)則;
盡管在觸發(fā)器的SQL 語(yǔ)句中可以參照其它數(shù)據(jù)庫(kù)中的對(duì)象,但是,觸發(fā)器只能創(chuàng)建在當(dāng)前數(shù)據(jù)庫(kù)中;
雖然觸發(fā)器可以參照視圖或臨時(shí)表,但不能在視圖或臨時(shí)表上創(chuàng)建觸發(fā)器,而只能在基表或在創(chuàng)建視圖的表上創(chuàng)建觸發(fā)器;
一個(gè)觸發(fā)器只能對(duì)應(yīng)一個(gè)表,這是由觸發(fā)器的機(jī)制決定的;
盡管TRUNCATE TABLE 語(yǔ)句如同沒(méi)有WHERE 從句的delete 語(yǔ)句,但是由于TRUNCATE TABLE 語(yǔ)句沒(méi)有被記入日志,所以該語(yǔ)句不能觸發(fā)delete 型觸發(fā)器;
WRITETEXT 語(yǔ)句不能觸發(fā)INSERT 或update 型的觸發(fā)器。
當(dāng)創(chuàng)建一個(gè)觸發(fā)器時(shí),必須指定觸發(fā)器的名字,在哪一個(gè)表上定義觸發(fā)器,激活觸發(fā) 器的修改語(yǔ)句,如INSERT、 delete、 update。 當(dāng)然兩個(gè)或三個(gè)不同的修改語(yǔ)句也可 以都觸發(fā)同一個(gè)觸發(fā)器,如INSERT 和update 語(yǔ)句都能激活同一個(gè)觸發(fā)器。
?
用管理工具Enterprise Manger 創(chuàng)建觸發(fā)器
其操作步驟如下:
啟動(dòng)Enterprise Manger, 登錄到指定的服務(wù)器上。
展開(kāi)數(shù)據(jù)庫(kù),然后展開(kāi)要在其上創(chuàng)建觸發(fā)器的表所在的數(shù)據(jù)庫(kù),然后單擊該表。
右擊鼠標(biāo),在彈出菜單中選擇ALL Tasks, 然后單擊Manage Triggers…。
如下圖:
??
在名字框中選擇new, 在文本框中輸入觸發(fā)器文本,如下圖 所示。 單擊Check Syntax 檢查語(yǔ)句是否正確。
單擊Apply, 在Name 下拉列表中會(huì)有新創(chuàng)建的觸發(fā)器名字。
單擊OK, 關(guān)閉窗口創(chuàng)建成功。 創(chuàng)建觸發(fā)器語(yǔ)法如下:
CREATE TRIGGER [trigger_name] ON [dbo].[Table
]
FOR INSERT, update, delete
AS
Sql_statement 各參數(shù)的說(shuō)明如下:
·trigger_name
是用戶要?jiǎng)?chuàng)建的觸發(fā)器的名字觸發(fā)器的名字,必須符合MS SQL Server 的命名規(guī)則,且其名字在當(dāng)前數(shù)據(jù)庫(kù)中必須是惟一的。
·Table
是與用戶創(chuàng)建的觸發(fā)器相關(guān)聯(lián)的表的名字,并且該表已經(jīng)存在。
·WITH ENCRYPTION
表示對(duì)包含有CREATE TRIGGER 文本的syscomments 表進(jìn)行加密。
·AFTER
表示只有在執(zhí)行了指定的操作(INSERT、 delete、 update)之后觸發(fā)器才被激活,執(zhí)行觸發(fā)器中的SQL 語(yǔ)句。若使用關(guān)鍵字FOR, 則表示為AFTER 觸發(fā)器,且該類(lèi)型觸發(fā)器僅能在表上創(chuàng)建。
·INSTEAD OF
請(qǐng)參看“12.8 INSTEAD OF 觸發(fā)器”
[delete] [,] [INSERT] [,] [update]
關(guān)鍵字用來(lái)指明哪種數(shù)據(jù)操作將激活觸發(fā)器。至少要指明一個(gè)選項(xiàng),在觸發(fā)器的定義中三者的順序不受限制,且各選項(xiàng)要用逗號(hào)隔開(kāi)。
·WITH APPEND
表明增加另外一個(gè)已存在某一類(lèi)型觸發(fā)器。只有在兼容性水平(指某一數(shù)據(jù)庫(kù)行為與以前版本的MS SQL Server 兼容程度)不大于65 時(shí)才使用該選項(xiàng)。
·NOT FOR REPLICATION
表明當(dāng)復(fù)制處理修改與觸發(fā)器相關(guān)聯(lián)的表時(shí),觸發(fā)器不能被執(zhí)行。
·AS
是觸發(fā)器將要執(zhí)行的動(dòng)作。
? ·Sql_statement
是包含在觸發(fā)器中的條件語(yǔ)句或處理語(yǔ)句。觸發(fā)器的條件語(yǔ)句定義了另外的標(biāo)準(zhǔn)來(lái)決定將被執(zhí)行的INSERT、 delete、 update 語(yǔ)句是否激活觸發(fā)器。
? ·IF update (column)
用來(lái)測(cè)定對(duì)某一確定列是插入操作還是更新操作,但不與刪除操作用在一起。
·IF (COLUMNS_updateD())
僅在INSERT 和update 類(lèi)型的觸發(fā)器中使用,用其來(lái)檢查所涉及的列是被更新還是被插入。
? ·Bitwise_operatorj
是在比較中使用的位邏輯運(yùn)算符。
? ·Pdated_bitmask
是那些被更新或插入的列的整形位掩碼。例如,如果表T 包括C1, C2, C3, C4, C5五列。為了確定是否只有C2 列被修改,可用2 來(lái)做位掩碼,如果想確定是否C1, C2, C3,C4 都被修改,可用14 來(lái)做位掩碼。
·Comparison_operator
是一比較操作符用“= ”表示檢查在updated_bitmask 中定義的所有列是否都被更新,用“>” 表示檢查是否在updated_bitmask 中定義的某些列被更新。
總結(jié)
以上是生活随笔為你收集整理的在SQLSERVER企业管理器中如何创建触发器的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: HP产品选件查询网站
- 下一篇: FreeBSD 下的 MySQL 备份方