程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> 其他數據庫知識 >> MSSQL >> SQLServer觸發器創立、刪除、修正、檢查示例代碼

SQLServer觸發器創立、刪除、修正、檢查示例代碼

編輯:MSSQL

SQLServer觸發器創立、刪除、修正、檢查示例代碼。本站提示廣大學習愛好者:(SQLServer觸發器創立、刪除、修正、檢查示例代碼)文章只能為提供參考,不一定能成為您想要的結果。以下是SQLServer觸發器創立、刪除、修正、檢查示例代碼正文


一: 觸發器是一種特別的存儲進程﹐它不克不及被顯式地挪用﹐而是在往表中拔出記載﹑更新記載或許刪除記載時被主動地激活。所以觸發器可以用來完成對表實行龐雜的完全性束縛。

二: SQL Server為每一個觸發器都創立了兩個公用表:Inserted表和Deleted表。這兩個表。

一: 觸發器是一種特別的存儲進程﹐它不克不及被顯式地挪用﹐而是在往表中拔出記載﹑更新記載或許刪除記載時被主動地激活。所以觸發器可以用來完成對表實行龐雜的完全性約`束。

二: SQL Server為每一個觸發器都創立了兩個公用表:Inserted表和Deleted表。這兩個表由體系來保護﹐它們存在於內存中而不是在數據庫中。這兩個表的構造老是與被該觸發器感化的表的構造雷同。觸發器履行 完成後﹐與該觸發器相干的這兩個表也被刪除。
Deleted表寄存因為履行Delete或Update語句而要從表中刪除的一切行。
Inserted表寄存因為履行Insert或Update語句而要向表中拔出的一切行。
三:Instead of 和 After觸發器
SQL Server2000供給了兩種觸發器:Instead of 和After 觸發器。這兩種觸發器的差異在於他們被激活的同:

Instead of觸發器用於替換惹起觸發器履行的T-SQL語句。除表以外﹐Instead of 觸發器也能夠用於視圖﹐用來擴大視圖可以支撐的更新操作。

After觸發器在一個Insert,Update或Deleted語句以後履行﹐停止束縛檢討等舉措都在After觸發器被激活之前產生。After觸發器只能用於表。

一個表或視圖的每個修正舉措(insert,update和delete)都可以有一個instead of 觸發器﹐一個表的每一個修正舉措都可以有多個After觸發器。
四:觸發器的履行進程
假如一個Insert﹑update或許delete語句違背了束縛﹐那幺After觸發器不會履行﹐由於對束縛的檢討是在After觸發器被沖動之前產生的。所以After觸發器不克不及超出束縛。

Instead of 觸發器可以代替激起它的操作來履行。它在Inserted表和Deleted表方才樹立﹐其它任何操作還沒有產生時被履行。由於Instead of 觸發器在束縛之前履行﹐所以它可以對束縛停止一些預處置。

五:應用T-SQL語句來創立觸發器

根本語句以下:
create trigger trigger_name
on {table_name | view_name}
{for | After | Instead of }
[ insert, update,delete ]
as
sql_statement

六:刪除觸發器:

根本語句以下:

drop trigger trigger_name

七:檢查數據庫中已有觸發器:

-- 檢查數據庫已有觸發器
use jxcSoftware
go
select * from sysobjects where xtype='TR'

-- 檢查單個觸發器
exec sp_helptext '觸發器名'

八:修正觸發器:

根本語句以下:
alter trigger trigger_name
on {table_name | view_name}
{for | After | Instead of }
[ insert, update,delete ]
as
sql_statement

九:相干示例:
1:在Orders表中樹立觸發器﹐當向Orders表中拔出一條定單記載時﹐檢討goods表的貨物狀況status能否為1(正在整頓)﹐是﹐則不克不及往Orders表參加該定單。
create trigger orderinsert
on orders
after insert
as
if (select status from goods,inserted
where goods.name=inserted.goodsname)=1
begin
print 'the goods is being processed'
print 'the order cannot be committed'
rollback transaction --回滾﹐防止參加
end
2:在Orders表樹立一個拔出觸發器﹐在添加一條定單時﹐削減Goods表響應的貨物記載中的庫存。
create trigger orderinsert1
on orders
after insert
as
update goods set storage=storage-inserted.quantity
from goods,inserted
where
goods.name=inserted.goodsname
3:在Goods表樹立刪除觸發器﹐完成Goods表和Orders表的級聯刪除。
create trigger goodsdelete
on goods
after delete
as
delete from orders
where goodsname in
(select name from deleted)
4:在Orders表樹立一個更新觸發器﹐監督Orders表的定單日期(OrderDate)列﹐使其不克不及手工修正.
create trigger orderdateupdate
on orders
after update
as
if update(orderdate)
begin
raiserror(' orderdate cannot be modified',10,1)
rollback transaction
end
5:在Orders表樹立一個拔出觸發器﹐包管向Orders表拔出的貨物名必需要在Goods表中必定存在。
create trigger orderinsert3
on orders
after insert
as
if (select count(*) from goods,inserted where goods.name=inserted.goodsname)=0
begin
print ' no entry in goods for this order'
rollback transaction
end

6:Orders表樹立一個拔出觸發器,包管向Orders表拔出的貨物信息要在Order表中添加

alter trigger addOrder
on Orders
for insert
as
insert into Order
select inserted.Id, inserted.goodName,inserted.Number from inserted
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved