小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

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

 qzg589 2005-09-08
SQL Server 2000中的觸發(fā)器使用
作者: yuhq
出處: blog
責(zé)任編輯: 方舟
[ 2005-04-12 09:09 ]

 
  示例

  在本例中,創(chuàng)建了一個(gè)德國(guó)客戶(hù)表和一個(gè)墨西哥客戶(hù)表。放置在視圖上的INSTEAD OF觸發(fā)器將把更新操作重新定向到適當(dāng)?shù)幕砩?。這時(shí)發(fā)生的插入是對(duì)CustomersGer表的插入而不是對(duì)視圖的插入。

  創(chuàng)建兩個(gè)包含客戶(hù)數(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
/**//*
計(jì)算方差的觸發(fā)器
*/
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.T1*P.T1+P.T2*P.T2)

FROM DCLB AS P INNER JOIN Inserted AS I
ON P.SID = I.SID

  觸發(fā)器的使用很方便,而且也很簡(jiǎn)單,重要的是理解inserted過(guò)程??蓪PDATE語(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)作。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多