青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

山寨:不是最好的,是最適合我們的!歡迎體驗(yàn)山寨 中文版MSDN

Blog @ Blog

當(dāng)華美的葉片落盡,生命的脈絡(luò)才歷歷可見。 -- 聶魯達(dá)

常用鏈接

統(tǒng)計(jì)

積分與排名

BBS

Blog

Web

最新評論

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

 

可以定義一個無論何時用INSERT語句向表中插入數(shù)據(jù)時都會執(zhí)行的觸發(fā)器。
  當(dāng)觸發(fā)INSERT觸發(fā)器時,新的數(shù)據(jù)行就會被插入到觸發(fā)器表和inserted表中。inserted表是一個邏輯表,它包含了已經(jīng)
插入的數(shù)據(jù)行的一個副本inserted表包含了INSERT語句中已記錄的插入動作。inserted表還允許引用由初始化INSERT語句而產(chǎn)生的日志數(shù)據(jù)。觸發(fā)器通過檢查inserted表來確定是否執(zhí)行觸發(fā)器動作或如何執(zhí)行它。inserted表中的行總是觸發(fā)器表中一行或多行的副本。
  日志記錄了所有修改數(shù)據(jù)的動作(INSERTUPDATEDELETE語句),但在事務(wù)日志中的信息是不可讀的。然而,inserted表允許你引用由INSERT語句引起的日志變化,這樣就可以將插入數(shù)據(jù)與發(fā)生的變化進(jìn)行比較,來驗(yàn)證它們或采取進(jìn)一步的動作。也可以直接引用插入的數(shù)據(jù),而不必將它們存儲到變量中。

 
 示例
  在本例中,將創(chuàng)建一個觸發(fā)器。無論何時訂購產(chǎn)品(無論何時向Order Details表中插入一條記錄),這個觸發(fā)器都將更新Products表中的一列(UnitsInStock)。用原來的值減去訂購的數(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ā)器的工作過程
  當(dāng)觸發(fā)DELETE觸發(fā)器后,從受影響的表中刪除的行將被放置到一個特殊的deleted表中。deleted表是一個邏輯表,它保留已被刪除數(shù)據(jù)行的一個副本deleted表還允許引用由初始化DELETE語句產(chǎn)生的日志數(shù)據(jù)。
  使用DELETE觸發(fā)器時,需要
考慮以下的事項(xiàng)和原則
  ·當(dāng)某行被添加到deleted表中時,它就不再存在于數(shù)據(jù)庫表中;因此,deleted表和數(shù)據(jù)庫表
沒有相同的行。

  ·創(chuàng)建deleted表時,空間是從內(nèi)存中分配的。deleted表總是被存儲在高速緩存中。

  ·為DELETE動作定義的觸發(fā)器并
不執(zhí)行TRUNCATE TABLE語句,原因在于日志不記錄TRUNCATE TABLE語句。

  
示例
  在本例中,將創(chuàng)建一個觸發(fā)器,無論何時刪除一個產(chǎn)品類別(即從Categories表中刪除一條記錄),該觸發(fā)器都會更新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ā)器的工作過程
  可將UPDATE語句看成兩步操作:即捕獲數(shù)據(jù)前像(before image)DELETE語句,和捕獲數(shù)據(jù)后像(after image)INSERT語句。當(dāng)在定義有觸發(fā)器的表上執(zhí)行UPDATE語句時,原始行(前像)被移入到deleted表,更新行(后像)被移入到inserted表。
  觸發(fā)器檢查deleted表和inserted表以及被更新的表,來確定是否更新了多行以及如何執(zhí)行觸發(fā)器動作。
  可以使用IF UPDATE語句定義一個監(jiān)視指定列的數(shù)據(jù)更新的觸發(fā)器。這樣,就可以讓觸發(fā)器容易的隔離出特定列的活動。當(dāng)它檢測到指定列已經(jīng)更新時,觸發(fā)器就會進(jìn)一步執(zhí)行適當(dāng)?shù)膭幼鳎绨l(fā)出錯誤信息指出該列不能更新,或者根據(jù)新的更新的列值執(zhí)行一系列的動作語句。
  
語法

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.'
101)
ROLLBACK TRANSACTION
END

  INSTEAD OF觸發(fā)器的工作過程
  可以在表或視圖上指定INSTEAD OF觸發(fā)器。執(zhí)行這種觸發(fā)器就能夠替代原始的觸發(fā)動作INSTEAD OF觸發(fā)器擴(kuò)展了視圖更新的類型。對于每一種觸發(fā)動作(INSERTUPDATE DELETE),每一個表或視圖只能有一個INSTEAD OF觸發(fā)器
  INSTEAD OF觸發(fā)器被用于更新那些沒有辦法通過正常方式更新的視圖。例如,通常不能在一個基于連接的視圖上進(jìn)行DELETE操作。然而,可以編寫一個INSTEAD OF DELETE觸發(fā)器來實(shí)現(xiàn)刪除。上述觸發(fā)器可以訪問那些如果視圖是一個真正的表時已經(jīng)被刪除的數(shù)據(jù)行。將被刪除的行存儲在一個名為deleted的工作表中,就像AFTER觸發(fā)器一樣。相似地,在UPDATE INSTEAD OF觸發(fā)器或者INSERT INSTEAD OF觸發(fā)器中,你可以訪問inserted表中的新行。

  不能在帶有WITH CHECK OPTION定義的視圖中創(chuàng)建INSTEAD OF觸發(fā)器。

示例
  在本例中,創(chuàng)建了一個德國客戶表和一個墨西哥客戶表。放置在視圖上的INSTEAD OF觸發(fā)器將把更新操作重新定向到適當(dāng)?shù)幕砩稀_@時發(fā)生的插入是對CustomersGer表的插入而不是對視圖的插入。
  創(chuàng)建兩個包含客戶數(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)建一個在上述視圖上的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

  通過更新視圖,測試觸發(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'


  那么具體的講,對于多列數(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 ),x
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ā)器的使用很方便,而且也很簡單,重要的是理解inserted過程。可將UPDATE語句看成兩步操作:即捕獲數(shù)據(jù)前像(before image)DELETE語句,和捕獲數(shù)據(jù)后像(after image)INSERT語句。當(dāng)在定義有觸發(fā)器的表上執(zhí)行UPDATE語句時,原始行(前像)被移入到deleted表,更新行(后像)被移入到inserted表。觸發(fā)器檢查deleted表和inserted表以及被更新的表,來確定是否更新了多行以及如何執(zhí)行觸發(fā)器動作。

 

 

posted on 2008-10-29 23:02 isabc 閱讀(1588) 評論(1)  編輯 收藏 引用

評論

# re: SQL Server 2000中的觸發(fā)器使用 2012-04-06 17:10 eee

dddd
dddd
dddd
dddd  回復(fù)  更多評論   


只有注冊用戶登錄后才能發(fā)表評論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


廣告信息(免費(fèi)廣告聯(lián)系)

中文版MSDN:
歡迎體驗(yàn)

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国产亚洲一级| 亚洲深夜影院| 在线一区免费观看| 99热免费精品| 一本色道久久综合亚洲精品高清| 亚洲国产精品精华液2区45| 亚洲第一区在线| 亚洲欧洲日本一区二区三区| 亚洲三级免费观看| 亚洲一区二区三区免费视频| 亚洲一区二区三区精品动漫| 欧美一区二区日韩一区二区| 久久久蜜桃一区二区人| 亚洲电影专区| 亚洲美女淫视频| 午夜精品久久久久久久99樱桃 | 亚洲国产成人午夜在线一区| 亚洲精品国产精品国自产在线 | 久久亚洲国产成人| 欧美国产欧美综合| 宅男精品视频| 久久久久国产一区二区三区四区| 毛片精品免费在线观看| 欧美午夜精品久久久| 国内成+人亚洲| 日韩午夜三级在线| 久久精品亚洲精品| 亚洲精品美女久久7777777| 日韩亚洲精品电影| 在线成人h网| 国产精品手机在线| 亚洲国产午夜| 欧美自拍偷拍| 亚洲美女黄色片| 久久综合久久88| 国产精品一卡二| 99国产精品久久久久老师| 亚洲欧美在线一区二区| 欧美黑人国产人伦爽爽爽| 亚洲综合第一| 欧美视频1区| 亚洲精品一区二区在线观看| 久久精品国产99| 亚洲深夜影院| 欧美体内she精视频| 亚洲人成亚洲人成在线观看图片 | 久久久久久亚洲精品中文字幕| 亚洲高清中文字幕| 久久久天天操| 激情成人亚洲| 久久久久综合一区二区三区| 一区二区黄色| 国产精品chinese| 亚洲视频福利| 一区二区三区日韩精品| 欧美韩国日本一区| 91久久精品久久国产性色也91| 久久久久久久久综合| 性欧美暴力猛交69hd| 国产欧美一区二区在线观看| 欧美一级日韩一级| 欧美亚洲日本一区| 国内揄拍国内精品少妇国语| 久久久国产精品一区二区中文| 亚洲伊人一本大道中文字幕| 国产精品萝li| 久久国产精品99精品国产| 香蕉久久夜色精品| 一区二区视频在线观看| 欧美91精品| 欧美精品少妇一区二区三区| 亚洲视频一区| 午夜精品亚洲一区二区三区嫩草| 欧美一区二区三区免费在线看 | 国产精品尤物| 伊人久久大香线| 欧美 日韩 国产 一区| 久久婷婷色综合| 亚洲国产美女精品久久久久∴| 美腿丝袜亚洲色图| 欧美成人精品1314www| 亚洲精品一区二区三区不| 亚洲激情成人网| 欧美日韩在线视频首页| 国产精品久久久久7777婷婷| 亚洲天堂av综合网| 欧美亚日韩国产aⅴ精品中极品| 一本色道久久综合| 亚洲欧美日韩中文播放| 在线日韩av片| 在线亚洲一区观看| 精品白丝av| 一本久久综合亚洲鲁鲁| 国产婷婷精品| 亚洲欧洲一区二区三区在线观看| 欧美视频一区二区三区四区| 久久精品道一区二区三区| 欧美大秀在线观看| 久久激情视频久久| 欧美精品网站| 久久免费视频观看| 欧美日韩在线直播| 麻豆精品91| 国产精品久久久久久久久久ktv | 国产精品国产三级国产专区53 | 欧美激情bt| 国产麻豆91精品| 亚洲日本在线观看| 黄色国产精品| 亚洲一区精品电影| 99精品欧美一区二区三区| 欧美伊人久久久久久久久影院| 亚洲免费观看在线观看| 久久久久久久激情视频| 欧美一区二视频| 欧美日韩视频一区二区三区| 免费在线观看一区二区| 国产日韩一区二区三区在线| 日韩视频三区| 一区二区冒白浆视频| 免费成人av资源网| 久久伊人一区二区| 国产日韩欧美视频| 亚洲自拍电影| 亚洲视频在线观看免费| 欧美激情女人20p| 欧美成人在线免费视频| 好看不卡的中文字幕| 欧美一区二区视频观看视频| 欧美一区二区免费观在线| 国产精品久久久久久妇女6080| 99伊人成综合| 中文成人激情娱乐网| 欧美精品系列| 99精品视频一区| 亚洲一区二区三区午夜| 国产精品草莓在线免费观看| 一卡二卡3卡四卡高清精品视频| 99re视频这里只有精品| 欧美日本一区| 中国成人亚色综合网站| 欧美亚洲综合网| 国产婷婷精品| 久久视频在线视频| 欧美激情一区三区| 日韩午夜高潮| 国产精品二区在线| 久久久久国产成人精品亚洲午夜| 亚洲综合色噜噜狠狠| 亚洲欧美国产视频| 国产欧美日韩一区二区三区在线| 亚洲欧美日本伦理| 玖玖综合伊人| 亚洲人体偷拍| 国产精品久久久免费| 亚洲女同精品视频| 久色婷婷小香蕉久久| 亚洲国产mv| 欧美日韩专区| 欧美中日韩免费视频| 老司机一区二区三区| 亚洲区一区二| 国产精品免费观看在线| 久久精品免视看| 亚洲三级网站| 久久www成人_看片免费不卡| 在线免费观看日本欧美| 欧美日韩国产一区二区| 欧美一区二区三区日韩视频| 欧美激情自拍| 欧美一区二区日韩一区二区| 在线日韩中文| 国产精品分类| 免费欧美在线视频| 亚洲在线播放电影| 亚洲动漫精品| 久久精品噜噜噜成人av农村| 亚洲乱码精品一二三四区日韩在线| 国产精品美女999| 欧美激情视频给我| 久久久另类综合| 亚洲女优在线| 99国产精品视频免费观看| 久久久精品五月天| 亚洲午夜未删减在线观看| 伊人春色精品| 国产欧美精品一区| 欧美日本韩国在线| 蜜桃精品久久久久久久免费影院| 亚洲在线一区二区三区| 亚洲激情一区二区三区| 久久婷婷国产综合国色天香| 亚洲欧美国产va在线影院| 亚洲美女视频| 亚洲日本国产| 亚洲国产日韩欧美在线99| 国产在线播放一区二区三区| 国产精品无码专区在线观看| 欧美日本中文字幕| 欧美成人免费播放|