日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

触发器实例讲解

發(fā)布時(shí)間:2024/8/1 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 触发器实例讲解 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

GPS平臺(tái)、網(wǎng)站建設(shè)、軟件開(kāi)發(fā)、系統(tǒng)運(yùn)維,找森大網(wǎng)絡(luò)科技!
https://cnsendnet.taobao.com
來(lái)自森大科技官方博客
http://www.cnsendblog.com/index.php/?p=2066

SQL觸發(fā)器實(shí)例1
定義: 何為觸發(fā)器?在SQL Server里面也就是對(duì)某一個(gè)表的一定的操作,觸發(fā)某種條件,從而執(zhí)行的一段程序。觸發(fā)器是一個(gè)特殊的存儲(chǔ)過(guò)程。
常見(jiàn)的觸發(fā)器有三種:分別應(yīng)用于Insert , Update , Delete 事件。
我為什么要使用觸發(fā)器?比如,這么兩個(gè)表:
Create Table Student( --學(xué)生表
StudentID int primary key, --學(xué)號(hào)

)
Create Table BorrowRecord( --學(xué)生借書(shū)記錄表
BorrowRecord int identity(1,1), --流水號(hào)
StudentID int , --學(xué)號(hào)
BorrowDate datetime, --借出時(shí)間
ReturnDAte Datetime, --歸還時(shí)間

)
用到的功能有:
1.如果我更改了學(xué)生的學(xué)號(hào),我希望他的借書(shū)記錄仍然與這個(gè)學(xué)生相關(guān)(也就是同時(shí)更改借書(shū)記錄表的學(xué)號(hào));
2.如果該學(xué)生已經(jīng)畢業(yè),我希望刪除他的學(xué)號(hào)的同時(shí),也刪除它的借書(shū)記錄。
等等。
這時(shí)候可以用到觸發(fā)器。對(duì)于1,創(chuàng)建一個(gè)Update觸發(fā)器:
Create Trigger truStudent
On Student --在Student表中創(chuàng)建觸發(fā)器
for Update --為什么事件觸發(fā)
As --事件觸發(fā)后所要做的事情
if Update(StudentID)
begin
Update BorrowRecord
Set StudentID=i.StudentID
From BorrowRecord br , Deleted d ,Inserted i --Deleted和Inserted臨時(shí)表
Where br.StudentID=d.StudentID
end

理解觸發(fā)器里面的兩個(gè)臨時(shí)的表:Deleted , Inserted 。注意Deleted 與Inserted分別表示觸發(fā)事件的表“舊的一條記錄”和“新的一條記錄”。 一個(gè)數(shù)據(jù)庫(kù)系統(tǒng)中有兩個(gè)虛擬表用于存儲(chǔ)在表中記錄改動(dòng)的信息,分別是: 虛擬表Inserted 虛擬表Deleted

在表記錄新增時(shí) 存放新增的記錄 不存儲(chǔ)記錄
修改時(shí) 存放用來(lái)更新的新記錄 存放更新前的記錄
刪除時(shí) 不存儲(chǔ)記錄 存放被刪除的記錄
一個(gè)Update 的過(guò)程可以看作為:生成新的記錄到Inserted表,復(fù)制舊的記錄到Deleted表,然后刪除Student記錄并寫(xiě)入新紀(jì)錄。
對(duì)于2,創(chuàng)建一個(gè)Delete觸發(fā)器
Create trigger trdStudent
On Student
for Delete
As
Delete BorrowRecord
From BorrowRecord br , Delted d
Where br.StudentID=d.StudentID
從這兩個(gè)例子我們可以看到了觸發(fā)器的關(guān)鍵:A.2個(gè)臨時(shí)的表;B.觸發(fā)機(jī)制。
SQL觸發(fā)器實(shí)例2

USE Master
GO
IF EXISTS (SELECT NAME FROM SYSOBJECTS WHERE XTYPE = ’U’ AND NAME = ’卷煙庫(kù)存表’)
DROP TABLE 卷煙庫(kù)存表
GO
IF EXISTS (SELECT NAME FROM SYSOBJECTS WHERE XTYPE = ’U’ AND NAME = ’卷煙銷售表’)
DROP TABLE 卷煙銷售表
GO
–業(yè)務(wù)規(guī)則:銷售金額 = 銷售數(shù)量 * 銷售單價(jià) 業(yè)務(wù)規(guī)則。
CREATE TABLE 卷煙銷售表
(
卷煙品牌 VARCHAR(40) PRIMARY KEY NOT NULL,
購(gòu)貨商 VARCHAR(40) NULL,
銷售數(shù)量 INT NULL,
銷售單價(jià) MONEY NULL,
銷售金額 MONEY NULL
)
GO
–業(yè)務(wù)規(guī)則:庫(kù)存金額 = 庫(kù)存數(shù)量 * 庫(kù)存單價(jià) 業(yè)務(wù)規(guī)則。
CREATE TABLE 卷煙庫(kù)存表
(
卷煙品牌 VARCHAR(40) PRIMARY KEY NOT NULL,
庫(kù)存數(shù)量 INT NULL,
庫(kù)存單價(jià) MONEY NULL,
庫(kù)存金額 MONEY NULL
)
GO
–創(chuàng)建觸發(fā)器,示例1

IF EXISTS (SELECT NAME FROM SYSOBJECTS WHERE XTYPE = ’TR’ AND NAME = ’T_INSERT_卷煙庫(kù)存表’)
DROP TRIGGER T_INSERT_卷煙庫(kù)存表
GO
CREATE TRIGGER T_INSERT_卷煙庫(kù)存表
ON 卷煙庫(kù)存表
FOR INSERT
AS
–提交事務(wù)處理
BEGIN TRANSACTION
–強(qiáng)制執(zhí)行下列語(yǔ)句,保證業(yè)務(wù)規(guī)則
UPDATE 卷煙庫(kù)存表
SET 庫(kù)存金額 = 庫(kù)存數(shù)量 * 庫(kù)存單價(jià)
WHERE 卷煙品牌 IN (SELECT 卷煙品牌 from INSERTED)
COMMIT TRANSACTION
GO

INSERT INTO 卷煙庫(kù)存表(卷煙品牌,庫(kù)存數(shù)量,庫(kù)存單價(jià),庫(kù)存金額)
SELECT ’紅塔山新勢(shì)力’,100,12,1200 UNION ALL
SELECT ’紅塔山人為峰’,100,22,NULL UNION ALL
SELECT ’云南映像’,100,60,500 UNION ALL
SELECT ’玉溪’,0,30,0
GO
–查詢數(shù)據(jù)
SELECT * FROM 卷煙庫(kù)存表
GO

–觸發(fā)器示例2

IF EXISTS (SELECT NAME FROM SYSOBJECTS WHERE XTYPE = ’TR’ AND NAME = ’T_INSERT_卷煙銷售表’)
DROP TRIGGER T_INSERT_卷煙銷售表
GO
CREATE TRIGGER T_INSERT_卷煙銷售表
ON 卷煙銷售表
FOR INSERT
AS
BEGIN TRANSACTION
–檢查數(shù)據(jù)的合法性:銷售的卷煙是否有庫(kù)存,或者庫(kù)存是否大于零
IF NOT EXISTS (
SELECT 庫(kù)存數(shù)量
FROM 卷煙庫(kù)存表
WHERE 卷煙品牌 IN (SELECT 卷煙品牌 FROM INSERTED)
)
BEGIN
–返回錯(cuò)誤提示
RAISERROR(’錯(cuò)誤!該卷煙不存在庫(kù)存,不能銷售。’,16,1)
–回滾事務(wù)
ROLLBACK
RETURN
END
IF EXISTS (
SELECT 庫(kù)存數(shù)量
FROM 卷煙庫(kù)存表
WHERE 卷煙品牌 IN (SELECT 卷煙品牌 FROM INSERTED) AND
庫(kù)存數(shù)量 <= 0
)
BEGIN
–返回錯(cuò)誤提示
RAISERROR(’錯(cuò)誤!該卷煙庫(kù)存小于等于0,不能銷售。’,16,1)
–回滾事務(wù)
ROLLBACK
RETURN
END
–對(duì)合法的數(shù)據(jù)進(jìn)行處理
–強(qiáng)制執(zhí)行下列語(yǔ)句,保證業(yè)務(wù)規(guī)則
UPDATE 卷煙銷售表
SET 銷售金額 = 銷售數(shù)量 * 銷售單價(jià)
WHERE 卷煙品牌 IN (SELECT 卷煙品牌 FROM INSERTED)
DECLARE @卷煙品牌 VARCHAR(40)
SET @卷煙品牌 = (SELECT 卷煙品牌 FROM INSERTED)
DECLARE @銷售數(shù)量 MONEY
SET @銷售數(shù)量 = (SELECT 銷售數(shù)量 FROM INSERTED)
UPDATE 卷煙庫(kù)存表
SET 庫(kù)存數(shù)量 = 庫(kù)存數(shù)量 - @銷售數(shù)量,
庫(kù)存金額 = (庫(kù)存數(shù)量 - @銷售數(shù)量)*庫(kù)存單價(jià)
WHERE 卷煙品牌 = @卷煙品牌
COMMIT TRANSACTION
GO
–請(qǐng)大家自行跟蹤[卷煙庫(kù)存表]和[卷煙銷售表]的數(shù)據(jù)變化。
–針對(duì)[卷煙銷售表],插入第一條測(cè)試數(shù)據(jù),該數(shù)據(jù)是正常的。
INSERT INTO 卷煙銷售表(卷煙品牌,購(gòu)貨商,銷售數(shù)量,銷售單價(jià),銷售金額)
SELECT ’紅塔山新勢(shì)力’,’某購(gòu)貨商’,10,12,1200
GO
–針對(duì)[卷煙銷售表],插入第二條測(cè)試數(shù)據(jù),該數(shù)據(jù) 銷售金額 不等于 銷售單價(jià) * 銷售數(shù)量。
–觸發(fā)器將自動(dòng)更正數(shù)據(jù),使 銷售金額 等于 銷售單價(jià) * 銷售數(shù)量。
INSERT INTO 卷煙銷售表(卷煙品牌,購(gòu)貨商,銷售數(shù)量,銷售單價(jià),銷售金額)
SELECT ’紅塔山人為峰’,’某購(gòu)貨商’,10,22,2000
GO
–針對(duì)[卷煙銷售表],插入第三條測(cè)試數(shù)據(jù),該數(shù)據(jù)中的卷煙品牌在 卷煙庫(kù)存表中找不到對(duì)應(yīng)。
–觸發(fā)器將報(bào)錯(cuò)。
INSERT INTO 卷煙銷售表(卷煙品牌,購(gòu)貨商,銷售數(shù)量,銷售單價(jià),銷售金額)
SELECT ’紅河V8’,’某購(gòu)貨商’,10,60,600
GO

–針對(duì)[卷煙銷售表],插入第三條測(cè)試數(shù)據(jù),該數(shù)據(jù)中的卷煙品牌在 卷煙庫(kù)存表中庫(kù)存為0。
–觸發(fā)器將報(bào)錯(cuò)。
INSERT INTO 卷煙銷售表(卷煙品牌,購(gòu)貨商,銷售數(shù)量,銷售單價(jià),銷售金額)
SELECT ’玉溪’,’某購(gòu)貨商’,10,30,300
GO

–查詢數(shù)據(jù)
SELECT * FROM 卷煙庫(kù)存表
SELECT * FROM 卷煙銷售表
GO

–修改觸發(fā)器
–實(shí)質(zhì)上,是將 CREATE TRIGGER … 修改為 ALTER TRIGGER …即可。
–刪除觸發(fā)器
DROP TRIGGER xxx
GO
–刪除測(cè)試環(huán)境
DROP TABLE 卷煙庫(kù)存表
GO
DROP TABLE 卷煙銷售表
GO
DROP TRIGGER T_INSERT_卷煙庫(kù)存表
GO
DROP TRIGGER T_INSERT_卷煙銷售表
GO
##################################################################
觸發(fā)器的基礎(chǔ)知識(shí)和例子
:create trigger tr_name
on table/view
{for | after | instead of } [update][,][insert][,][delete]
[with encryption]
as {batch | if update (col_name) [{and|or} update (col_name)] }
說(shuō)明:
1 tr_name :觸發(fā)器名稱
2 on table/view :觸發(fā)器所作用的表。一個(gè)觸發(fā)器只能作用于一個(gè)表
3 for 和after :同義
4 after 與instead of :sql 2000新增項(xiàng)目afrer 與 instead of 的區(qū)別
After
在觸發(fā)事件發(fā)生以后才被激活,只可以建立在表上
Instead of
代替了相應(yīng)的觸發(fā)事件而被執(zhí)行,既可以建立在表上也可以建立在視圖上
5 insert、update、delete:激活觸發(fā)器的三種操作,可以同時(shí)執(zhí)行,也可選其一
6 if update (col_name):表明所作的操作對(duì)指定列是否有影響,有影響,則激活觸發(fā)器。此外,因?yàn)閐elete 操作只對(duì)行有影響,
所以如果使用delete操作就不能用這條語(yǔ)句了(雖然使用也不出錯(cuò),但是不能激活觸發(fā)器,沒(méi)意義)。
7 觸發(fā)器執(zhí)行時(shí)用到的兩個(gè)特殊表:deleted ,inserted
deleted 和inserted 可以說(shuō)是一種特殊的臨時(shí)表,是在進(jìn)行激活觸發(fā)器時(shí)由系統(tǒng)自動(dòng)生成的,其結(jié)構(gòu)與觸發(fā)器作用的表結(jié)構(gòu)是一
樣的,只是存放 的數(shù)據(jù)有差異。
續(xù)
下面表格說(shuō)明deleted 與inserted 數(shù)據(jù)的差異
deleted 與inserted 數(shù)據(jù)的差異
Inserted
存放進(jìn)行insert和update 操作后的數(shù)據(jù)
Deleted
存放進(jìn)行delete 和update操作前的數(shù)據(jù)
注意:update 操作相當(dāng)于先進(jìn)行delete 再進(jìn)行insert ,所以在進(jìn)行update操作時(shí),修改前的數(shù)據(jù)拷貝一條到deleted 表中,修改后
的數(shù)據(jù)在存到觸發(fā)器作用的表的同時(shí),也同時(shí)生成一條拷貝到insered表中

SQL Server 2000中的觸發(fā)器使用

觸發(fā)器是數(shù)據(jù)庫(kù)應(yīng)用中的重用工具,它的應(yīng)用很廣泛。這幾天寫(xiě)一個(gè)化學(xué)數(shù)據(jù)統(tǒng)計(jì)方面的軟件,需要根據(jù)采樣,自動(dòng)計(jì)算方差,在這里,我使用了觸發(fā)器。
  下面我摘錄了SQL Server官方教程中的一段關(guān)于觸發(fā)器的文字,確實(shí)有用的一點(diǎn)文字描述。
  可以定義一個(gè)無(wú)論何時(shí)用INSERT語(yǔ)句向表中插入數(shù)據(jù)時(shí)都會(huì)執(zhí)行的觸發(fā)器。
  當(dāng)觸發(fā)INSERT觸發(fā)器時(shí),新的數(shù)據(jù)行就會(huì)被插入到觸發(fā)器表和inserted表中。inserted表是一個(gè)邏輯表,它包含了已經(jīng)插入的數(shù) 據(jù)行的一個(gè)副本。inserted表包含了INSERT語(yǔ)句中已記錄的插入動(dòng)作。inserted表還允許引用由初始化INSERT語(yǔ)句而產(chǎn)生的日志數(shù) 據(jù)。觸發(fā)器通過(guò)檢查inserted表來(lái)確定是否執(zhí)行觸發(fā)器動(dòng)作或如何執(zhí)行它。inserted表中的行總是觸發(fā)器表中一行或多行的副本。
  日志記錄了所有修改數(shù)據(jù)的動(dòng)作(INSERT、UPDATE和DELETE語(yǔ)句),但在事務(wù)日志中的信息是不可讀的。然而,inserted表 允許你引用由INSERT語(yǔ)句引起的日志變化,這樣就可以將插入數(shù)據(jù)與發(fā)生的變化進(jìn)行比較,來(lái)驗(yàn)證它們或采取進(jìn)一步的動(dòng)作。也可以直接引用插入的數(shù)據(jù),而 不必將它們存儲(chǔ)到變量中。
  示例
  在本例中,將創(chuàng)建一個(gè)觸發(fā)器。無(wú)論何時(shí)訂購(gòu)產(chǎn)品(無(wú)論何時(shí)向Order Details表中插入一條記錄),這個(gè)觸發(fā)器都將更新Products表中的一列(UnitsInStock)。用原來(lái)的值減去訂購(gòu)的數(shù)量值即為新值。

USE Northwind

CREATE TRIGGER OrdDet_Insert
ON [Order Details]
FOR INSERT
AS
UPDATE P SET
UnitsInStock = P.UnitsInStock – I.Quantity
FROM Products AS P INNER JOIN Inserted AS I
ON P.ProductID = I.ProductID

DELETE觸發(fā)器的工作過(guò)程
  當(dāng)觸發(fā)DELETE觸發(fā)器后,從受影響的表中刪除的行將被放置到一個(gè)特殊的deleted表中。deleted表是一個(gè)邏輯表,它保留已被刪除數(shù)據(jù)行的一個(gè)副本。deleted表還允許引用由初始化DELETE語(yǔ)句產(chǎn)生的日志數(shù)據(jù)。
  使用DELETE觸發(fā)器時(shí),需要考慮以下的事項(xiàng)和原則:
  ?當(dāng)某行被添加到deleted表中時(shí),它就不再存在于數(shù)據(jù)庫(kù)表中;因此,deleted表和數(shù)據(jù)庫(kù)表沒(méi)有相同的行。
  ?創(chuàng)建deleted表時(shí),空間是從內(nèi)存中分配的。deleted表總是被存儲(chǔ)在高速緩存中。
  ?為DELETE動(dòng)作定義的觸發(fā)器并不執(zhí)行TRUNCATE TABLE語(yǔ)句,原因在于日志不記錄TRUNCATE TABLE語(yǔ)句。
  示例
  在本例中,將創(chuàng)建一個(gè)觸發(fā)器,無(wú)論何時(shí)刪除一個(gè)產(chǎn)品類別(即從Categories表中刪除一條記錄),該觸發(fā)器都會(huì)更新Products表中的Discontinued列。所有受影響的產(chǎn)品都標(biāo)記為1,標(biāo)示不再使用這些產(chǎn)品了。

USE Northwind

CREATE TRIGGER Category_Delete
ON Categories
FOR DELETE
AS
UPDATE P SET Discontinued = 1
FROM Products AS P INNER JOIN deleted AS d
ON P.CategoryID = d.CategoryID

UPDATE觸發(fā)器的工作過(guò)程
  可將UPDATE語(yǔ)句看成兩步操作:即捕獲數(shù)據(jù)前像(before image)的DELETE語(yǔ)句,和捕獲數(shù)據(jù)后像(after image)的INSERT語(yǔ)句。當(dāng)在定義有觸發(fā)器的表上執(zhí)行UPDATE語(yǔ)句時(shí),原始行(前像)被移入到deleted表,更新行(后像)被移入到 inserted表。
  觸發(fā)器檢查deleted表和inserted表以及被更新的表,來(lái)確定是否更新了多行以及如何執(zhí)行觸發(fā)器動(dòng)作。
  可以使用IF UPDATE語(yǔ)句定義一個(gè)監(jiān)視指定列的數(shù)據(jù)更新的觸發(fā)器。這樣,就可以讓觸發(fā)器容易的隔離出特定列的活動(dòng)。當(dāng)它檢測(cè)到指定列已經(jīng)更新時(shí),觸發(fā)器就會(huì)進(jìn)一步執(zhí)行適當(dāng)?shù)膭?dòng)作,例如發(fā)出錯(cuò)誤信息指出該列不能更新,或者根據(jù)新的更新的列值執(zhí)行一系列的動(dòng)作語(yǔ)句。
  語(yǔ)法

IF UPDATE (<column_name>)

例1
  本例阻止用戶修改Employees表中的EmployeeID列。

USE Northwind

GO
CREATE TRIGGER Employee_Update
ON Employees
FOR UPDATE
AS
IF UPDATE (EmployeeID)
BEGIN
RAISERROR (‘Transaction cannot be processed.
***** Employee ID number cannot be modified.’, 10, 1)
ROLLBACK TRANSACTION
END

INSTEAD OF觸發(fā)器的工作過(guò)程
  可以在表或視圖上指定INSTEAD OF觸發(fā)器。執(zhí)行這種觸發(fā)器就能夠替代原始的觸發(fā)動(dòng)作。INSTEAD OF觸發(fā)器擴(kuò)展了視圖更新的類型。對(duì)于每一種觸發(fā)動(dòng)作(INSERT、UPDATE或 DELETE),每一個(gè)表或視圖只能有一個(gè)INSTEAD OF觸發(fā)器。
  INSTEAD OF觸發(fā)器被用于更新那些沒(méi)有辦法通過(guò)正常方式更新的視圖。例如,通常不能在一個(gè)基于連接的視圖上進(jìn)行DELETE操作。然而,可以編寫(xiě)一個(gè) INSTEAD OF DELETE觸發(fā)器來(lái)實(shí)現(xiàn)刪除。上述觸發(fā)器可以訪問(wèn)那些如果視圖是一個(gè)真正的表時(shí)已經(jīng)被刪除的數(shù)據(jù)行。將被刪除的行存儲(chǔ)在一個(gè)名為deleted的工作表 中,就像AFTER觸發(fā)器一樣。相似地,在UPDATE INSTEAD OF觸發(fā)器或者INSERT INSTEAD OF觸發(fā)器中,你可以訪問(wèn)inserted表中的新行。
  不能在帶有WITH CHECK OPTION定義的視圖中創(chuàng)建INSTEAD OF觸發(fā)器。
示例
  在本例中,創(chuàng)建了一個(gè)德國(guó)客戶表和一個(gè)墨西哥客戶表。放置在視圖上的INSTEAD OF觸發(fā)器將把更新操作重新定向到適當(dāng)?shù)幕砩稀_@時(shí)發(fā)生的插入是對(duì)CustomersGer表的插入而不是對(duì)視圖的插入。
  創(chuàng)建兩個(gè)包含客戶數(shù)據(jù)的表:

SELECT * INTO CustomersGer FROM Customers WHERE Customers.Country = ‘Germany’

SELECT * INTO CustomersMex FROM Customers WHERE Customers.Country = ‘Mexico’
GO

在該數(shù)據(jù)上創(chuàng)建視圖:

CREATE VIEW CustomersView AS

SELECT * FROM CustomersGer
UNION
SELECT * FROM CustomersMex
GO

創(chuàng)建一個(gè)在上述視圖上的INSTEAD OF觸發(fā)器:

CREATE TRIGGER Customers_Update2

ON CustomersView
INSTEAD OF UPDATE AS
DECLARE @Country nvarchar(15)
SET @Country = (SELECT Country FROM Inserted)
IF @Country = ‘Germany’
BEGIN
UPDATE CustomersGer
SET CustomersGer.Phone = Inserted.Phone
FROM CustomersGer JOIN Inserted
ON CustomersGer.CustomerID = Inserted.CustomerID
END
ELSE
IF @Country = ‘Mexico’
BEGIN
UPDATE CustomersMex
SET CustomersMex.Phone = Inserted.Phone
FROM CustomersMex JOIN Inserted
ON CustomersMex.CustomerID = Inserted.CustomerID
END

通過(guò)更新視圖,測(cè)試觸發(fā)器:

UPDATE CustomersView SET Phone = ’ 030-007xxxx’

WHERE CustomerID = ‘ALFKI’
SELECT CustomerID, Phone FROM CustomersView
WHERE CustomerID = ‘ALFKI’
SELECT CustomerID, Phone FROM CustomersGer
WHERE CustomerID = ‘ALFKI’

那么具體的講,對(duì)于多列數(shù)據(jù),如何計(jì)算方差呢?:

CREATE TRIGGER [calT1T2T3] ON dbo.DCLB

FOR INSERT,UPDATE
AS
update P
SET
P.T1=(I.P1+I.P2+I.P3+I.P4+I.P5+I.P6),
P.T2=(I.Y1+I.Y2+I.Y3+I.Y4+I.Y5+I.Y6 ),
P.T3=SQRT(P.T1P.T1+P.T2P.T2)
FROM DCLB AS P INNER JOIN Inserted AS I
ON P.SID = I.SID

觸發(fā)器的使用很方便,而且也很簡(jiǎn)單,重要的是理解inserted過(guò)程。可將UPDATE語(yǔ)句看成兩步操作:即捕獲數(shù)據(jù)前像(before image)的DELETE語(yǔ)句,和捕獲數(shù)據(jù)后像(after image)的INSERT語(yǔ)句。當(dāng)在定義有觸發(fā)器的表上執(zhí)行UPDATE語(yǔ)句時(shí),原始行(前像)被移入到deleted表,更新行(后像)被移入到 inserted表。觸發(fā)器檢查deleted表和inserted表以及被更新的表,來(lái)確定是否更新了多行以及如何執(zhí)行觸發(fā)器動(dòng)作。

GPS平臺(tái)、網(wǎng)站建設(shè)、軟件開(kāi)發(fā)、系統(tǒng)運(yùn)維,找森大網(wǎng)絡(luò)科技!
https://cnsendnet.taobao.com
來(lái)自森大科技官方博客
http://www.cnsendblog.com/index.php/?p=2066

總結(jié)

以上是生活随笔為你收集整理的触发器实例讲解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。