關於SQL SERVER觸發器的理解
觸發器是一種特殊的儲存過程,不是使用者直接呼叫,而是通過對錶的一些操作觸發的,比如對某個表的insert,update,delete,如果我們在該表中定義了相應的觸發器,那麼觸發器就會執行。
在SQL SERVER中,觸發器分為兩種,一是前觸發器(instead of),另一種是後觸發器(after or for).
它們的區別在於:
前觸發器(instead of) 顧名思意,就是代替引起觸發的操作,而去執行觸發器裡面定義的指令碼.
例如:
定義表:create talbe a(id int,name varchar(20),create table b(id int,name varchar(20).
定義觸發器:create trigger tri_a
on a instead of insert
as
begin
insert into b select * from inserted
end
當我們執行 insert into a (id,name) values (1,'abc) 的時候,該語句就觸發了定義在表的觸發器,從而執行insert into b
select * from inserted ,而不去執行插入表a的操作。其中inserted是個虛擬表,存放在記憶體中,下面會有詳細介紹。
後觸發器(after or for),是指對錶執行了insert,update,delete後,觸發定義在表的觸發器,執行觸發器的指令碼。
例如:
定義表:create table products(proid int identity(1,1),proname varchar(20),procount int ,unitprice decimal ,totalprice decimal )
定義觸發器:create trigger computeTotalprice
on products for insert
as
begin
update products
set totalprice = procount * unitprice
where proname in (select proname form. inserted)
end
當我們執行 insert into products (proname,procount,unitprice) values ('FOOD',10,4.5)後,就會觸發定義在products表的觸發器,該觸發器是計算該商品的總價。
在以上的觸發器的指令碼中都用到了虛擬表,inserted,但是還有另一虛擬表deleted,下面總結這兩個表的用途:
1.插入操作(Insert)
Inserted表有資料,Deleted表無資料
2.刪除操作(Delete)
Inserted表無資料,Deleted表有資料
3.更新操作(Update)
Inserted表有資料(新資料),Deleted表有資料(舊資料)
總結:雖然觸發器,本人在實踐中用得比較少,
但是個人認為,
前觸發器用在對某個表操作前,進行一些邏輯處理和判斷,從而判斷是否對該表進行相應的操作。
後觸發器用在對某個表操作後,進行操作自身和其他表。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-624600/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SQL Server 觸發器SQLServer觸發器
- SQL Server觸發器SQLServer觸發器
- sql-server觸發器SQLServer觸發器
- Sql Server系列:觸發器SQLServer觸發器
- 【SQL Server】-- 一觸即發之觸發器SQLServer觸發器
- SQL Server:觸發器詳解SQLServer觸發器
- 淺談SQL Server觸發器的使用SQLServer觸發器
- SQL Server 觸發器詳情HOPPSQLServer觸發器
- SQL server觸發器簡單示例SQLServer觸發器
- 瞭解SQL Server觸發器及觸發器中的事務AWSQLServer觸發器
- SQL Server 觸發器的修改與刪除SQLServer觸發器
- 淺入淺出SQL Server 觸發器SQLServer觸發器
- SQL Server資料庫級別觸發器SQLServer資料庫觸發器
- SQL Server約束和DML觸發器的比較SQLServer觸發器
- SQL Server 2005系列教學_ 觸發器SQLServer觸發器
- SQL觸發器SQL觸發器
- SQL Server 2005中的DDL觸發器的實現SQLServer觸發器
- 關於SQL Server配置管理器SQLServer
- SQL Server中類似Oracle中before觸發器SQLServerOracle觸發器
- 建立SQL觸發器SQL觸發器
- SQL觸發器(二)SQL觸發器
- SQL Server實戰五:儲存過程與觸發器SQLServer儲存過程觸發器
- SQL Server關於AlwaysOn的理解-讀寫分離的誤區(一)SQLServer
- SQL Server觸發器建立、刪除、修改、檢視示例步驟SQLServer觸發器
- SQL Server 2000中的觸發器使用SQLServer觸發器
- 用SQL Server觸發器實現業務規則的強制執行SQLServer觸發器
- 關於SQL Server的WITH(NOLOCK)和(NOLOCK)SQLServer
- 關於SQL Server的分割槽表SQLServer
- SQL Sever 2000中的前觸發器和後觸發器SQL觸發器
- SQL總結(六)觸發器SQL觸發器
- 關於SQL Server tempdb 的各種操作SQLServer
- 關於SQL Server2005/2008中架構的理解SQLServer架構
- SQL觸發器例項講解SQL觸發器
- sql2000觸發器SQL觸發器
- MySQL與SQL的觸發器的不同寫法MySql觸發器
- 深刻的教訓——SQL Server關於TempDB的使用SQLServer
- PL/SQL 07 觸發器 triggerSQL觸發器
- SQL資料庫觸發器例項SQL資料庫觸發器