久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

SQLServer觸發器創建刪除和修改及查看的代碼怎么寫

163次閱讀
沒有評論

共計 2719 個字符,預計需要花費 7 分鐘才能閱讀完成。

這篇文章給大家介紹 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

關于 SQLServer 觸發器創建刪除和修改及查看的代碼怎么寫就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-07-28發表,共計2719字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 美姑县| 北碚区| 依兰县| 五莲县| 墨江| 德安县| 余姚市| 弋阳县| 哈尔滨市| 特克斯县| 彝良县| 云龙县| 巨鹿县| 定安县| 乐业县| 石楼县| 黄石市| 肃北| 甘孜| 进贤县| 龙陵县| 温州市| 钦州市| SHOW| 宜良县| 双江| 尼勒克县| 怀来县| 句容市| 文成县| 尉氏县| 钟祥市| 阳谷县| 南昌市| 绥中县| 沁水县| 孟村| 成都市| 通州市| 青河县| 左贡县|