sql server----觸發器
阿新 • • 發佈:2019-02-13
觸發器
一、定義:
觸發器是一種特殊的儲存過程,一般的儲存過程只要被主動呼叫時才會實現,而觸發器則是使用者對錶的修改時就會自自動觸發。 觸發器直接定義在表上,當沒有實現相應的功能時會自動回滾到以前的狀態。觸發器經常用於對於表的刪除與更新,例如對於一個表的刪除某一個數據,但這個資料會在其他的表格做為外碼,如果不建立觸發器進行連級刪除,那麼就會產生約束的衝突。
二、語法
觸發器分為兩種型別,一種是after,另一種是Instead of .
after作為動作實現之後,進行的操作。
Instead of 為在刪除或者更新等操作之前,先進行的操作(一般所要刪除的資料作為外來鍵是,使用instead of)
建立觸發器:
create trigger tgr_name
on table_name
with encrypion –加密觸發器
for update...
as
Transact-SQL
修改觸發器:
create trigger tgr_name on table_name {after|instead of} {insert|delete|update} as SQL語句
刪除觸發器:
drop trigger +觸發器名
在使用觸發器時,會使用兩個特殊的虛擬表-----deleted 和inserted 。這兩個有以下的特性:
① 表的結構與所繫結的表結構一樣,儲存的所要處理的資料。
② 在事務處理完成是,deleted和inserted這兩個表也將會被刪除。
③ deleted儲存的是將要delete或者update 的資料。
④inserted儲存的是將要insert或者update 的資料
三、用法
一、表的關聯刪除
create trigger Employee_trigger1
on Employees
instead of delete
as
begin
delete from EmployeeTerritories where EmployeeID=(select EmployeeID from deleted )
print '刪除成功'
end
呼叫:
delete from Employees where EmployeeID=2
修改觸發器:
alter trigger Employee_trigger1
on Employees
for update
as
begin
print '更新完成'
end
刪除觸發器:
drop trigger Employee_trigger1
二、表的插入之前的主鍵判斷
create trigger Employees_tigger
on Employees
instead of insert
as
begin
if exists (select * from inserted where EmployeeID in(select EmployeeID from Employees ))
begin
print '存在ID,請重新輸入'
rollback
end
else
print '插入成功'
end
刪除觸發器:
drop trigger Employees_tigger