国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > SQL Server > 正文

簡單觸發器的使用 獻給SQL初學者

2024-08-31 00:58:04
字體:
來源:轉載
供稿:網友
首先,啰嗦幾句廢話如下:
 ?。?)觸發器(trigger)是個特殊的存儲過程,它的執行并不需要我們去顯式調用,而是由一些事件觸發,這有點類似C#中的事件處理機制。當使用UPDATE,INSERT  或DELETE的一種或多種對指定的數據庫的相關表進行操作時,會觸發觸發器。
 ?。?)觸發器可以包含復雜的SQL語句,主要用于強制復雜的業務規則或要求。
 ?。?)觸發器能夠維持數據庫的完整性,當執行插入、更新或刪除操作時,觸發器會根據表與表之間的關系,強制保持其數據的完整性。
  
  好,啰嗦完了開始貼代碼,首先貼上我創建的兩張表所包含的列,他們的關聯關系是1對多,以UserID進行關聯。

簡單觸發器的使用 獻給SQL初學者


然后來一個非常簡單的觸發器

復制代碼 代碼如下:


IF EXISTS(SELECT * FROM sysobjects
WHERE AND TYPE='TR')
DROP TRIGGER tr_Users_OnUpdate
GO --這里呢創建觸發器與存儲過程類似(都是DDL)
--先判斷如否存在同名觸發器就刪除然后重建
CREATE TRIGGER tr_Users_OnUpdate
ON Users FOR UPDATE
AS PRINT ‘Users表已發生修改'
GO


上述代碼中,tr_Users_OnUpdate為觸發器名稱,Users為表名。這觸發器的作用是當向Users表執行Update時將打印“Users表已發生修改”。
  好了我們可以看到這個觸發器的實用性不是很大,那么接下來呢我們再來學習下關于觸發器里兩種特殊的表“inserted”和“deleted”。這兩張表主要用于觸發器。Deleted 表用于存儲 執行DELETE 和 UPDATE操作時所影響的行的副本。而Inserted 表則用于存儲 INSERT 和 UPDATE 語句所影響的行的副本。那么我們看到執行UPDATE操作時都會有記錄分別存儲到“inserted”和“deleted”。其實理解起來不難deleted表存儲的是Update之前的記錄,而inserted存儲的呢則是Update之后的記錄,這里關于理論性東西我不再贅述,官方資料有更詳細說明。
  現在我們要做的就是本文的重點,當往WordInfo添加一條記錄時,使用觸發器使UserInfo的相應記錄的LeaveCount字段增加1。代碼如下:

復制代碼 代碼如下:


--添加留言的觸發器
IF EXISTS(SELECT name FROM sysobjects WHERE AND TYPE='TR')
DROP TRIGGER tr_LeaveWord_Add
GO
CREATE TRIGGER tr_LeaveWord_Add
ON WordInfo FOR INSERT
AS UPDATE UserInfo SET LeaveCount=LeaveCount+1
WHERE UserID=(SELECT TOP 1 UserID FROM Inserted)
GO


OK,到這里就可以收工了,值得注意的是如果觸發器是UPDATE觸發的,那么在執行Update后再查詢更新之前的數據改成查詢deleted表即可。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 广东省| 金昌市| 田林县| 台安县| 武川县| 临夏市| 察隅县| 东莞市| 辽宁省| 刚察县| 达拉特旗| 寿光市| 洛隆县| 衡南县| 浦北县| 镇巴县| 星座| 永胜县| 石屏县| 钟祥市| 铜陵市| 调兵山市| 叶城县| 明溪县| 泗阳县| 民乐县| 江孜县| 工布江达县| 元谋县| 青海省| 宜川县| 阿图什市| 尚义县| 台中市| 左贡县| 宝清县| 册亨县| 尼玛县| 肃南| 平陆县| 紫金县|