sql server update觸發器_SQL Server 觸發器

T-SQL 觸發器

觸發器分為

BEFORE觸發器*(SQL Server不支持,Oracle支持)在事件發生時觸發。

AFTER觸發器是 SQLServer生成的最初用于自動相應數據修改的機制。在 SQLServer200以前的版本中 AFTER觸發器是唯一的觸發器,因此不用指明 AFTER,也可以用 FOR代替,該種觸發器的行為是在事件之后執行

SQLServer2000中新增了 INSTEAD OF觸發器該觸發器執行某項操作,而不是觸發這個觸發器的操作

AFTER觸發器

AFTER觸發器是默認的觸發器類型,因此關鍵字AFTER可以選。

CREATE TRIGGER trigger_name

ON table_name

AFTER {INSERT | UPDATE | DELETE }

AS

BEGIN

-- SQL statement

END

GO

案例

??在pubs數據庫中生成一個觸發器,打印一條消息,表示UPDATE Commands語句更新的數據行數。

USE pubs; -- 選擇pubs數據庫。

GO

CREATE TRIGGER tr_cmd_upd ON dbo.Commands

AFTER UPDATE

AS

BEGIN

PRINT 'Trigger Output '+CONVERT(VARCHAR(5),@@ROWCOUNT)+' rows were updated.';

END

GO

-- 執行一條語句,查看觸發器是否生效。

UPDATE dbo.commands

SET title=title

WHERE ID = 4;

GO

INSERTED表和DELETED表

在大多數觸發器情況下,需要知道數據修改中發生了什么變化,可以在INSERTEDDELETED表中找到這個信息。

案例:

SELECT * INTO commands_copy FROM commands;

GO

CREATE TRIGGER tr_cc ON dbo.commands_copy

FOR INSERT, UPDATE, DELETE

AS

BEGIN

PRINT 'Inserted:';

SELECT ID, Type, Platform FROM INSERTED;

PRINT 'Deleted:';

SELECT ID, Type, Platform FROM DELETED;

END

語句INSERTED的內容DELETED內容
INSERT增加的行
UPDATE新行舊行
DELETE刪除的行

檢查列更新

INSERT或者UPDATE觸發器內可以使用UPDATE()函數。

使用UPDATE()函數檢查INSERTUPDATE操作對數據列的影響。

CREATE TRIGGER tr_ins_upd ON dbo.commands_copy

FOR INSERT, UPDATE

AS

BEGIN

IF(UPDATE(ID))

BEGIN

RAISERROR('You can not change the ID.', 15, 1);

END

END

執行

-[ ] 執行AFTER觸發器之前發生的事件。

  • 限制處理 -- 包括檢查限制,唯一限制和主鍵限制。

  • 聲明式引用 -- 這些操作是外部鍵限制定義的,保證表間的正確關系。

  • 觸發操作 -- 即觸發觸發器的數據修改操作。這項操作發生在觸發器執行之前,但結果要等到完成觸發器操作之后才提交到數據庫。

  • 觸發順序

  • 可以有多個對應于INSERTUPDATEDELETE的觸發器,SQL Server可以指定第一個和最后一個觸發器,但中間的觸發器順序則無法確定。

  • 觸發順序

  • SP_SETTRIGGERORDER過程是設置觸發器順序的工具。

  • 格式:

    SP_SETTRIGGERORDER trigger_name, 順序,'操作'./*其中,順序為[First | Last | None]   操作為[Insert | Update | Delete]*/

    例如:

  • SP_SETTRIGGERORDER tr_cmd_upd, FIRST, 'UPDATE';
  • 建議盡量不要對同一個表的同一事件定義多個觸發器,可以把相關的操作定義到一個觸發器中。

特殊考慮

AFTER觸發器可以用于具有級聯參照完整性限制的表格中。

WRITETEXT與TRUNCATE TABLE不觸發觸發器。

觸發器是對象,因此要在數據庫中有唯一的名稱。

AFTER觸發器的限制

AFTER觸發器只能用于表,不能用于視圖。

一個AFTER觸發器不能用在多個表上。

TEXT, NTEXT與IMAGE列不能引用AFTER觸發器。

INSTEAD OF 觸發器

  1. ?SQL Server 2000引入新的Instead of 觸發器。

  2. Instead of 的含義:該觸發器執行某項操作,而不是觸發這個觸發器的操作。

  3. 什么時候使用Instead of觸發器。

    3.1. 數據庫里的數據禁止修改。

    3.2. 有可能要回滾修改的SQL語句。

    3.3. 在視圖中使用的觸發器,AFTER觸發器不能在視圖中使用。

    3.4. 控制數據的修改方式和流程。

ab314c808f817e7fb97c3afa40b671ed.png

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/271089.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/271089.shtml
英文地址,請注明出處:http://en.pswp.cn/news/271089.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

iOS 公司開發者賬號申請

對于獨立開發者很有用,收藏起來,以備不時之需! 蘋果開發者賬號分三種。 個人賬號:個人申請用于開發蘋果app所使用的賬號,僅限于個人使用,申請比較容易,$99。 公司賬號:以公司的名義申請的開發者賬號,用于公…

php渲染視圖,Laravel 視圖渲染:Blade 模板引擎

Laravel 視圖渲染:Blade 模板引擎由 學院君 創建于3年前, 最后更新于 2年前版本號 #153378 views27 likes0 collectsBlade 簡介Blade 是由 Laravel 提供的非常簡單但功能強大的模板引擎,不同于其他流行的 PHP 模板引擎,Blade 在視圖中并不約束…

項目管理基礎:系統切換相關知識筆記

1、系統試運行主要任務對新系統進行初始化、補錄各種原始數據記錄記錄系統運行過程中的數據和狀況核對新舊系統輸出結果是否正確對實際系統的輸入方式進行考察主要包括是否方便、效率、可靠性、誤操作保護等方面。對系統實際運行、響應速度進行實際測試,確定是否滿足…

sql 分組統計_leetcode-sql面試題十七篇精講合集

這可能是全網最干貨的sql講解系列文章。全系列共十七講。做了大量的知識點的拓展,涵蓋了sql的方方面面。歡迎關注點贊收藏,正在整理三年數據分析的點點滴滴。包括Excel、python、sql、power BI、各種分析模型框架。保證輸出最干的干貨。涉及知識點包括&a…

實時數據處理插件開發flume+kafka+storm:flume

有時間了再寫。。。。轉載于:https://www.cnblogs.com/wchb/p/5786582.html

項目管理基礎:系統維護相關知識筆記

1、系統的可維護性系統的可維護性就是項目維護人員理解、改正、改動和改進該軟件的難易程度。提高系統的可維護性是開發軟件吸引所有步驟的關鍵目的,系統能否被很好地維護,可用系統的可維護性這一指標來衡量。1.1 系統可維護性的評價指標可理解性&#x…

java ibm 2035,C# java 連接 IBM MQ時出現 2035 或 2013認證錯誤的解決方法

當C# 或 java 連接 IBM MQ 是出現 2035 或 2013的錯誤時java的錯誤提示:com.ibm.msg.client.jms.DetailedJMSSecurityException: JMSWMQ2013: 為隊列管理器“QM1”提供的安全性認證無效,連接方式為“Client”,主機名為“9.186.105.212(1414)”…

python給兩個列表排序方法_Python連接兩個字符串列表并對其元素排序的最佳方法...

假設我有兩個字符串列表:x[a,b] and b[c,d]我需要的最終結果是:^{pr2}$重要的一點是,我希望對列表元素的字母進行排序。在這里,他們是建設,但在我的實際問題,這不是這樣。所以如果我有“ba”,在…

mac搭建本地svn

1.終端,創建SVN資源文件庫 svnadmin create /Volumes/DATA/SVNTest 2配置權限 上面的語句執行完之后在相應路徑下可以找到該文件夾,打開之后 這里主要是修改conf里面的是三個文件:authz,passwd,scnserve.conf a.authz …

一個棧楨對應著一個方法

一個棧楨對應著一個方法

php提交之前驗證數據ajax提示,在通過Ajax請求提交之前使用jQuery進行表單驗證

在嘗試使用Ajax請求將表單提交到我的php腳本之前,我試圖讓我的表單進行驗證.我查看了stackoverflow并沒有找到有用的東西.我有3個輸入和一個提交按鈕:$(document).ready(function() {function validator(){return $(form).validate();}$(form).on(submit, function(…

程序員幽默:39個奇葩代碼注釋,每一個都能笑抽

1. 只有上帝知道//我寫這一行的時候,只有上帝和我知道我在寫什么//現在,只有上帝知道了2. 相隔時空的diss//somedev1 - 6/7/02 添加對登錄屏幕的暫時追蹤功能//somedev2 - 5/22/07 暫時個屁(仿佛看到兩個程序員相隔時空的diss)3…

網絡安全用python嗎_使用Python進行網絡安全滲透——密碼攻擊測試器

相關文章:本篇將會涉及:HTTP 基本認證對HTTP Basic認證進行密碼暴力攻擊測試什么是HTTP 基本認證HTTP基本認證(HTTP Basic Authentication)是HTTP協議中實現Web資源訪問控制的最簡單的認證手段。其通過添加header頭域的方式或者在URL中附帶參數的方式提供…

EJB3 學習筆記六

開發表音映射的實體 Java持久化規范(JPA),即是實體bean通遠元數據在javaBean和數據庫之間建立映射關系,常見的hibernate toplink openjpa 在src目錄下添加META-INF/persistence.xml文件,示例代碼如下: <?xmlversion"1.0"encoding"UTF-8"?> <…

棧出現的異常和設置棧的大小-Xss

異常 java.lang.StackOverflowError 看下面的例子&#xff0c;默認的棧內存 設置棧內存 使用參數-Xss大小來設置棧的大小

bmp 像素點 php,讀取BMP圖像每一像素點RGB數據 | 學步園

對于24位bmp圖片&#xff0c;每一個像素點存放著此點的RGB值。首先定義一個結構體&#xff0c;包含紅(red)、綠(green)、藍(blue)這三個字段&#xff0c;如下&#xff1a;//像素顏色值typedef struct tagPOINT{BYTE b;BYTE g;BYTE r;} POINT;接下來定義用來存放每一像素點RGB值…

項目管理基礎:系統評價相關知識

1、概念軟件系統的評價分為廣義評價和狹義評價。廣義評價&#xff1a;主要是指系統從開發開始到結束的過程中&#xff0c;每個階段都要進行系統評價。狹義評價&#xff1a;主要是指在系統建成后并投入運行之后進行全面、綜合的評價。2、廣義評價分類根據時間與軟件系統所處的階…

AutoHotKey程序防止反編譯的簡單手段

可以使用AutoHotKey自帶的工具。 AutoHotKey安裝完成后&#xff08;我使用的是1.1.0.0&#xff09;&#xff0c;找到安裝所在目錄下的文件&#xff1a;\Compiler\Ahk2Exe.exe。 程序界面如下&#xff1a; 簡單使用&#xff1a; 1、選擇源文件&#xff08;script file) 2、選擇目…