Sql Server觸發(fā)器的使用
對表的操作 |
Inserted邏輯表 |
Deleted邏輯表 |
增加記錄(insert) |
存放增加的記錄 |
無 |
刪除記錄(delete) |
無 |
存放被刪除的記錄 |
修改記錄(update) |
存放更新后的記錄 |
存放更新前的記錄 |
三、for、after、instead of觸發(fā)器
after:觸發(fā)器在觸發(fā)它們的語句完成后執(zhí)行。如果該語句因錯(cuò)誤而失敗,觸發(fā)器將不會執(zhí)行。不能為視圖指定after觸發(fā)器,只能為表指定該觸發(fā)器??梢詾槊總€(gè)觸發(fā)操作(insert、update、delete)指定多個(gè)after觸發(fā)器。如果表有多個(gè)after觸發(fā)器,可使用sp_settriggerorder定義哪個(gè)after觸發(fā)器最先激發(fā),哪個(gè)最后激發(fā)。除第一個(gè)和最后一個(gè)觸發(fā)器外,所有其他的after觸發(fā)器的激發(fā)順序不確定,并且無法控制。
for:等同于after
instead of:該觸發(fā)器代替觸發(fā)操作執(zhí)行??稍诒砗鸵晥D上指定instead of觸發(fā)器。只能為每個(gè)觸發(fā)操作(insert、update、delete)定義一個(gè)instead of觸發(fā)器。instead of觸發(fā)器可用于對insert和update語句中提供的數(shù)據(jù)值執(zhí)行增強(qiáng)的完整性檢查。
四、 觸發(fā)器的使用
1、創(chuàng)建觸發(fā)器:
create trigger trigger_name
on {table_name | view_name}
{for| After | Instead of }
[ insert, update,delete ]
as
sql_statement
2、刪除觸發(fā)器:
drop trigger trigger_name
3、查看數(shù)據(jù)庫中已有的觸發(fā)器:
select * from sysobjects where xtype='TR'
4、查看單個(gè)觸發(fā)器:
exec sp_helptext '觸發(fā)器名'
5、修改觸發(fā)器:
alter trigger trigger_name
on {table_name | view_name}
{for| After | Instead of }
[ insert, update,delete ]
as
sql_statement
五、觸發(fā)器的實(shí)例
1、在Orders表中建立觸發(fā)器,當(dāng)向Orders表中插入一條記錄時(shí),檢查goods表的貨品狀態(tài)status是否為1。是,則不能往Orders表加入該訂單。
if (object_id('tgr_orders_insert', 'tr') is not null)drop trigger [tgr_orders_insert];
go
create trigger [tgr_orders_insert]
on [orders]
after insert
as
if (select [status] from [goods],[inserted] where [goods].name=[inserted].name)=1
begin
print 'the goods is being processed'
print 'the order cannot be committed'
rollback transaction --回滾﹐避免加入
end
相關(guān)文章
SqlServer數(shù)據(jù)庫中文亂碼問題解決方法
SQL版的亂碼問題還是出現(xiàn)在SQL SERVER的安裝設(shè)置上。默認(rèn)安裝時(shí)系統(tǒng)默認(rèn)的排序規(guī)則是拉丁文的排序規(guī)則,但一般人在安裝時(shí)沒有考慮到這一點(diǎn),安裝時(shí)只是點(diǎn)取下一步,安裝完成后,造成了SQL版在使用過程中出現(xiàn)亂碼2020-03-03SQL Server本地時(shí)間和UTC時(shí)間的相互轉(zhuǎn)換實(shí)現(xiàn)代碼
SQL Server 本地時(shí)間和UTC時(shí)間的相互轉(zhuǎn)換的代碼,需要的朋友可以參考下。2011-07-07列出SQL Server中具有默認(rèn)值的所有字段的語句
上個(gè)星期我在對一個(gè)供應(yīng)商開發(fā)的數(shù)據(jù)庫按規(guī)定進(jìn)行故障排除的時(shí)候,我們需要對他們數(shù)據(jù)庫中50個(gè)表的每一個(gè)都進(jìn)行查看,以確保所有期望是默認(rèn)值的字段都被分配了默認(rèn)值。你可以想象這是一個(gè)多么令人畏懼的工作,而我立即提出了這個(gè)問題。有沒有一個(gè)比在SQL Server管理套件中打開每一個(gè)表來查看這個(gè)schema的更好方法嗎?2008-10-10MSSQL監(jiān)控?cái)?shù)據(jù)庫的DDL操作(創(chuàng)建,修改,刪除存儲過程,創(chuàng)建,修改,刪除表等)
下面就是一個(gè)解決上述問題的方案,我們通過創(chuàng)建一個(gè)表DatabaseLog和DDL觸發(fā)器來解決問題,首先在msdb數(shù)據(jù)庫里面新建一個(gè)表DatabaseLog,用來保存DDL觸發(fā)器獲取的信息2013-08-08SQL?Server數(shù)據(jù)庫連接查詢和子查詢實(shí)戰(zhàn)案例
子查詢(嵌套查詢)子查詢也稱嵌套查詢,是指一個(gè)SELECT查詢語句可以嵌入另一個(gè)SELECT查詢語句之中,下面這篇文章主要給大家介紹了關(guān)于SQL?Server數(shù)據(jù)庫連接查詢和子查詢的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2023-04-04