sql觸發器afterfor
❶ sql語句中,觸發器中for 和 after 的區別是什麼
兩個沒區別都是在update,insert ,delete 之後觸發操作!
inserted of 屬於前觸發性,在update,insert ,delete 之前操作
❷ sql server 觸發器 中 for 怎麼使用
創建觸發器的語法是:
create trigger 觸發器名稱 on(為哪個表創建觸發器) for (創建什麼樣的觸發器)
只要記住,for後面跟觸發器的類型就行了。
觸發器主要分2種,DML和DDL。after和instead of 都是DML觸發器,其中,after主要是對表進行增、刪、改時觸發,而instead of 觸發器並不執行其所定義的操作,只執行觸發器本身。
❸ sql after觸發器的簡單問題……T^T 新手,求教。
if(inserted.GRADE='差) 改成 if (select GRADE from inserted)='差'
❹ sql語句的觸發器問題,instead of、after、for事件的區別,還有execute as字句的使用。謝謝
after等價於for,是事後觸發。instead of則會取代原來的操作,例如在你的例子里,將不再執行插入操作,而是執行觸發器里的操作。
execute as是用來定義模塊的執行上下文
EXECUTE AS { CALLER | SELF | OWNER | 'user_name' }
其中CALLER指模塊調用方,SELF指創建或更改模塊的用戶,OWNER指模塊的當前所有者, 『user_name』 則是指定的用戶。
❺ 觸發器for和after的區別
for和after沒有區別。
for=after 相同,操作後
AFTER 觸發器(也叫「FOR」觸發器)會在觸發 insert、update 或是delect 動作之後執行。例如,一個 Employees 表上的 AFTER 觸發器會在在 Employee 表上執行一條 update 語句後激活。因此,AFTER 觸發器只有在已插入一行或是多行和所有約束已被處理且通過後才觸發。
❻ sql中觸發器instead of 和after的區別是什麼
after觸發器是在操作成功後,所採取的一些動作,而對於instead of觸發器,對資料庫的操作只是
一個「導火線」而已,真正起作用的是觸發器裡面的動作;往往這種觸發器會有很多分支判斷語句在裡面,根據不用的條件做不同的動作觸發器能處理更復雜的約束--簡單的可用級聯及簡單約束來實現。
看看這個就差不多明白了:http://bbs.csdn.net/topics/300074591
❼ 我想問下SQL 2005中的觸發器的for,instead of,after3種觸發器的區別~
FOR | AFTER
AFTER 指定觸發器僅在觸發 SQL 語句中指定的所有操作都已成功執行時才被觸發。所有的引用級聯操作和約束檢查也必須在激發此觸發器之前成功完成。
如果僅指定 FOR 關鍵字,則 AFTER 為默認值。
不能對視圖定義 AFTER 觸發器。
INSTEAD OF
指定執行 DML 觸發器而不是觸發 SQL 語句,因此,其優先順序高於觸發語句的操作。
如果僅指定 FOR 關鍵字,則 AFTER 為默認值。
也就是說, FOR = AFTER。
下面是一個觸發器的例子:
-- 創建測試主表.
CREATE TABLE test_main (
id INT,
value VARCHAR(10),
PRIMARY KEY(id)
);
-- 創建測試子表.
CREATE TABLE test_sub (
id INT,
main_id INT,
value VARCHAR(10),
PRIMARY KEY(id)
);
-- 創建外鍵.
ALTER TABLE test_sub
ADD CONSTRAINT main_id_cons
FOREIGN KEY (main_id) REFERENCES test_main;
-- 創建 FOR 觸發器.
CREATE TRIGGER InsertTest
ON test_sub
FOR INSERT
AS
BEGIN
PRINT('INSERT test_sub!');
END;
Go
INSERT INTO test_sub VALUES( 100,100,'100');
消息 547,級別 16,狀態 0,第 1 行
INSERT 語句與 FOREIGN KEY 約束"main_id_cons"沖突。該沖突發生於資料庫"TestDev",表"dbo.test_main", column 'id'。
語句已終止。
從上面的結果可以看到,由於外鍵沖突,插入失敗,導致觸發器也沒有被執行。
-- 修改為 AFTER 觸發器.
ALTER TRIGGER InsertTest
ON test_sub
AFTER INSERT
......
INSERT INTO test_sub VALUES( 100,100,'100');
消息 547,級別 16,狀態 0,第 1 行
INSERT 語句與 FOREIGN KEY 約束"main_id_cons"沖突。該沖突發生於資料庫"TestDev",表"dbo.test_main", column 'id'。
語句已終止。
可以看到,AFTER 運行結果與 FOR 一樣。
-- 修改為 INSTEAD OF 觸發器.
ALTER TRIGGER InsertTest
ON test_sub
INSTEAD OF INSERT
......
INSERT INTO test_sub VALUES( 100,100,'100');
INSERT test_sub!
(1 行受影響)
從上面的結果看到,觸發器被執行了。
但是 test_sub 中並沒有 100,100,'100' 的數據。
原因在於:
INSTEAD OF 指定執行 DML 觸發器而不是觸發 SQL 語句
也就是說 當你的觸發器是 INSTEAD OF INSERT 的時候
你的 INSERT 語句,將直接執行這個觸發器
而不是等你 INSERT 語句執行完了,數據寫到表裡面了以後,才觸發。
❽ SQL中,觸發器是什麼
1、觸發器。 定義: 何為觸發器?在SQL Server裡面也就是對某一個表的一定的操作,觸發某種條件,從而執行的一段程序。觸發器是一個特殊的存儲過程。 常見的觸發器有三種:分別應用於Insert , Update , Delete 事件。(SQL Server 2000定義了新的觸發器,這里不提) 我為什麼要使用觸發器?比如,這么兩個表: Create Table Student( --學生表 StudentID int primary key, --學號 .... ) Create Table BorrowRecord( --學生借書記錄表 BorrowRecord int identity(1,1), --流水號 StudentID int , --學號 BorrowDate datetime, --借出時間 ReturnDAte Datetime, --歸還時間 ... ) 用到的功能有: 1.如果我更改了學生的學號,我希望他的借書記錄仍然與這個學生相關(也就是同時更改借書記錄表的學號); 2.如果該學生已經畢業,我希望刪除他的學號的同時,也刪除它的借書記錄。 等等。 這時候可以用到觸發器。對於1,創建一個Update觸發器: Create Trigger truStudent On Student for Update ------------------------------------------------------- --Name:truStudent --func:更新BorrowRecord 的StudentID,與Student同步。 --Use :None --User:System --Author: 懶蟲 # SapphireStudio ( www.chair3.com) --Date : 2003-4-16 --Memo : 臨時寫寫的,給大家作個Sample。沒有調試阿。 ------------------------------------------------------- As if Update(StudentID) begin Update BorrowRecord Set br.StudentID=i.StudentID From BorrowRecord br , Deleted d ,Inserted i Where br.StudentID=d.StudentID end 理解觸發器裡面的兩個臨時的表:Deleted , Inserted 。注意Deleted 與Inserted分別表示觸發事件的表「舊的一條記錄」和「新的一條記錄」。 一個Update 的過程可以看作為:生成新的記錄到Inserted表,復制舊的記錄到Deleted表,然後刪除Student記錄並寫入新紀錄。 對於2,創建一個Delete觸發器 Create trigger trdStudent On Student for Delete ------------------------------------------------------- --Name:trdStudent --func:同時刪除 BorrowRecord 的數據 --Use :None --User:System --Author: 懶蟲 # SapphireStudio ( www.chair3.com) --Date : 2003-4-16 --Memo : 臨時寫寫的,給大家作個Sample。沒有調試阿。 ------------------------------------------------------- As Delete BorrowRecord From BorrowRecord br , Delted d Where br.StudentID=d.StudentID 從這兩個例子我們可以看到了觸發器的關鍵:A.2個臨時的表;B.觸發機制。 這里我們只講解最簡單的觸發器。復雜的容後說明。 事實上,我不鼓勵使用觸發器。觸發器的初始設計思想,已經被「級聯」所替代。