參考了別人寫的文章,我刪除掉一些廢話,只看一些我想看的資訊。整理了一下,記錄在這裡,方便以後查閱!
1.當觸發insert觸發器時,新的資料行就會被插入到觸發器表和inserted表中。
2.當觸發delete觸發器後,從觸發器表中刪除的行將被儲存到deleted表中。注意:deleted表和觸發器表中沒有相同的行。執行truncate table語句時觸發器不會執行。
3.當觸發update觸發器時,更新前的資料移入到deleted表,更新後資料被移入到inserted表。
一、使用例子
例子1:建立乙個觸發器,如果產品有訂購歷史,則回滾。
create例子2:保證不能刪除表中資料trigger
trig_deleteproduct
onproducts
fordelete
asif (select
count(*) from
[order details
]as od inner
join deleted as d on od.productid = d.productid) >
0begin
raiserror('
該產品已經有訂購資訊,不能被刪除!
',16,1
)
rollback
transaction
return
end
create例子3:保證每次最多只能刪除乙個雇員trigger
trig_protectdata
on tablename for
delete
asraiserror('
不能刪除改表中的資料
',16,1,'提示'
)rollback
transaction
return
create例子4:監視指定列的資料更新trigger
trig_deleteemployee
onemployees
fordelete
asif (select
count(*) from deleted) >
1begin
raiserror('
一次不能刪除多條資料!
',16,1
)
rollback
transaction
return
end
create例子5:更新時引起關聯表某字段值的更新trigger
trig_updateemployee
onemployees
forupdate
asif
update
(firstname)
begin
raiserror('
firstname不能更新!
',16,1
)
rollback
transaction
return
end
alter以後發現有新的例子 繼續新增在。。trigger
[tr_updatestudent]on
[dbo
].[t_student
]for
update
asdeclare
@updatei
intbegin
select
@updatei
= tid from
inserted;
update dbo.t_teacher set xm='0
'where id=
@updatei
;
end
二、觸發器多一點了解
1、觸發器的被動型
被動型的意思是指觸發器發生在事務之後。當啟用觸發器時,整個查詢已經執行並且事務也已經被記錄到日誌中(但未提交,只是記錄到啟用觸發器的語句點)。這意味著如果觸發器需要回滾,那麼必須撤銷已經做的所有工作。這和約束是不同,約束是主動的,約束是發生在語句真正執行前。這意味著約束會檢測可能失敗的操作,並且在程序的前期就予以阻止。所以約束通常執行得快一些-在更為複雜的查詢中速度更快。注意,只有在發生回滾時,約束明顯更快。
如果正在處理少量回滾,而且受影響的語句的複雜性較低,執行之間較短,那麼觸發器和約束之間沒有太大的區別。但是在無法預知回滾的數量的時候,堅持使用約束的效率更好。
2、使用if update()和columns_update()
update()函式只在觸發器的作用域內適用。它唯一的目的是提供乙個布林值,來說明特殊列是否已經更新。
columns_update()函式和update()的執行方式不同,但目的相同。columns_update()函式可以一次檢查多列。為了實現這一點,該函式使用了位掩碼。
於上圖的情況,資料的單個位元組說明了第2,第3,以及第6列已經更新,而其他列沒有更新。對於超過8列的情況,sql server就會在右邊新增另乙個位元組並且繼續計數。
對於上圖,這次是跟心了第2,第9以及第14列。
示例:column_update()>0 檢查是否有列被更新。
column_update()^21=0 檢查是否更新了所有指定列(1、3、5)。
建立觸發器如下:
create triggerupdatecheck2執行語句以及說明如下:ontb_money
for update
asif columns_updated()&7 = 3 --如果同時更新了name,mymoney才觸發
begin
print('我的錢和姓名改變了!');
end
update tb_money set name ='張飛'where id =
1update tb_money set name ='趙雲
', mymoney =
102where id =1--
此行會啟用觸發器
--計算過程如下
--id name tb_money
--1 1 1 7(全部更新為7)
--0 1 1 name和tb_money同時更新為(與3=3)
MS SQLserver資料庫安裝
sql2008的安裝 1,雙擊開啟setup安裝檔案 2,點選 全新安裝或向現有安裝新增功能 3,安裝程式支援規則,安裝完之後,點選確定 4,輸入產品的金鑰,點選下一步 5,彈出 安裝程式支援檔案 點選安裝 6,安裝程式支援規則,點選下一步 7,設定角色選擇 sql sever 功能安裝 s 點選下...
MS SQL Server 資料庫命名規範
命名規範 表 表名如order useraccout 符合以下規範 1.統一採用單數形式,反對orders 2.首字母大寫,多個單詞的話,單詞首字母大寫,反對order useraccout order 3.避免中文拼音,反對agentbaoci 4.避免下劃線連線,反對user accout 下劃...
c 連線資料庫MS SQL Server
c 連線資料庫ms sql server 方法一 可以利用sqlconnectionstringbuilder,這樣不必去記住名稱。using system.data.sql using system.data.sqlclient sqlconnectionstringbuilder scsb ne...