性少妇vide0seⅹfree_国产剧情视频在线观看_日日碰夜夜爽_九九这里只有精品视频_性free毛茸茸偷窥videos_国产v亚洲

中培偉業(yè)IT資訊頻道
您現(xiàn)在的位置:首頁 > IT資訊 > 數(shù)據(jù)庫 > SQL Server如何利用觸發(fā)器實現(xiàn)表的歷史修改痕跡的

SQL Server如何利用觸發(fā)器實現(xiàn)表的歷史修改痕跡的

2020-07-15 17:42:58 | 來源:中培企業(yè)IT培訓網(wǎng)

在開發(fā)許多應用程序時,有必要記錄某些數(shù)據(jù)表的歷史記錄或修改記錄,以便將來發(fā)生數(shù)據(jù)錯誤時可以檢查數(shù)據(jù)。針對此業(yè)務需求,我們可以通過數(shù)據(jù)庫觸發(fā)器輕松實現(xiàn)歷史記錄功能。那么,SQL Server如何利用觸發(fā)器實現(xiàn)表的歷史修改痕跡的?本文以SQL Server 2005數(shù)據(jù)庫中的觸發(fā)器為例(因為手中的項目用的就是這個數(shù)據(jù)庫)。

  先簡單描述一下SQL Server觸發(fā)器

  SQL Server觸發(fā)器的inserted和deleted

SQL Server為每個觸發(fā)器都創(chuàng)建了兩個專用虛擬表:inserted表和deleted表。這兩個表由系統(tǒng)來維護,他們存在于內(nèi)存中,而不是在數(shù)據(jù)庫中。這兩個表的結構總是與被該觸發(fā)器作用的表結構相同。觸發(fā)器執(zhí)行完成后,與該觸發(fā)器相關的兩個表會被刪除(即在內(nèi)存中銷毀)。

inserted表存放由執(zhí)行insert或update語句而要想飆中插入的所有行;即:插入后或更新后的值。

deleted表存放由delete或update語句而要從表中刪除的所有行;即:刪除或更新錢的值。

  SQL Server觸發(fā)器的instead of和after

SQL Server提供了兩種觸發(fā)器:instead of和after觸發(fā)器。這兩種觸發(fā)器的區(qū)別在于他們被激活的時機不同:

· instead of觸發(fā)器用于替代引用觸發(fā)器執(zhí)行的sql語句。除表之外,instead of觸發(fā)器也可以用于視圖,用來擴展視圖可以支持更新操作。

· after觸發(fā)器在一個inserted、update或delete語句之后執(zhí)行,進行約束檢查等動作都在after觸發(fā)器被激活之前發(fā)生。after觸發(fā)器只能用于數(shù)據(jù)表中。

說(復制)了這么多,是因為我們要實現(xiàn)的功能需要用到inserted虛擬表、deleted虛擬表和after觸發(fā)器。

  實現(xiàn)方法

通過一個示例來演示具體的實現(xiàn)方法。

假設當前有一個表:產(chǎn)品表(product),字段為“產(chǎn)品名(name)”、“產(chǎn)品描述(description)”、“單價(unit_cost)”和“生成日期(pub_time)”。

CREATE TABLE product(name VARCHAR(50),description VARCHAR(200),unit_cost MONEY,pub_time DATETIME)

GO

現(xiàn)在我們”上帝”的需求是:需要記錄product表發(fā)生數(shù)據(jù)變化(增、刪、改)時,記錄每次操作改動情況。

  1.創(chuàng)建日志表

需要創(chuàng)建一個產(chǎn)品日志表(product_log)用來將記錄每次數(shù)據(jù)改動情況,我這里直接在原數(shù)據(jù)表的結構上增加兩個字段(在實際開發(fā)環(huán)境中,大家可以根據(jù)需求來設置日志表的表結構),分別為sqlcomm和exectime;代碼如下:

1).CREATE TABLE product_log(name VARCHAR(50),description VARCHAR(200),unit_cost MONEY,pub_time DATETIME,sqlcomm varchar(10),exectime datetime)

2).GO

新增的兩個字段sqlcomm和exectime分別記錄執(zhí)行命令(insert、update和delete)和執(zhí)行時間。

  2.增加觸發(fā)器

在產(chǎn)品表增加觸發(fā)器,其目的是為了記錄表數(shù)據(jù)發(fā)生改變時記錄到product_log中。

針對插入(insert)操作,增加名為tr_product_i的觸發(fā)器:

1.CREATE TRIGGER tr_product_i

2.ON product

3.AFTER INSERT

4.AS

5.if @@rowcount = 0 --為了避免占用資源,當影響行數(shù)為0時,結束觸發(fā)器

6.return

7.insert into product_log (name,description,unit_cost,pub_time,sqlcomm,exectime)

8.select name,description,unit_cost,pub_time,'insert',getdate() from inserted

9.GO

  針對更新(update)操作,增加名為tr_product_u的觸發(fā)器:

1.CREATE TRIGGER tr_product_u

2.ON product

3.AFTER UPDATE

4.AS

5.if @@rowcount = 0 --為了避免占用資源,當影響行數(shù)為0時,結束觸發(fā)器

6.return

7./*更新前*/

8.insert into product_log (name,description,unit_cost,pub_time,sqlcomm,exectime)

9.select name,description,unit_cost,pub_time,'update',getdate() from deleted

10./*更新后*/

11.insert into product_log (name,description,unit_cost,pub_time,sqlcomm,exectime)

12.select name,description,unit_cost,pub_time,'update',getdate() from inserted

13.GO

  針對刪除(delete)操作,增加名為tr_product_d的觸發(fā)器:

1.CREATE TRIGGER tr_product_d

2.ON product

3.AFTER DELETE

4.AS

5.if @@rowcount = 0 --為了避免占用資源,當影響行數(shù)為0時,結束觸發(fā)器

6.return

7.insert into product_log (name,description,unit_cost,pub_time,sqlcomm,exectime)

8.select name,description,unit_cost,pub_time,'delete',getdate() from deleted

9.GO

  3.測試觸發(fā)器

  插入(insert)測試

1.INSERT INTO product(name,description,unit_cost,pub_time)

2.VALUES('逗比','這是一個逗比的測試數(shù)據(jù)',200.5,'1990-11-18')

3.GO

4.SELECT * FROM product

5.SELECT * FROM product_log

6.GO

  更新(update)測試

1.UPDATE product SET unit_cost=250.0 WHERE name='逗比'

2.GO

3.SELECT * FROM product

4.SELECT * FROM product_log

5.GO

  刪除(delete)測試

1.DELETE FROM product WHERE name='逗比'

2.GO

3.SELECT * FROM product

4.SELECT * FROM product_log

5.GO

以上即是關于SQL Server如何利用觸發(fā)器實現(xiàn)表的歷史修改痕跡的全部內(nèi)容,想了解更多關于SQL Server數(shù)據(jù)庫的信息,請繼續(xù)關注中培偉業(yè)。

主站蜘蛛池模板: 一级少妇高清性色生活片 | 一级做a爱片性色毛片高清 国产艳遇久久久久久久精品电影 | 少妇特黄A片一区二区三区 日日夜夜澡 | 国语对白粗口刺激videos | 欧美 日韩 综合在线免费观看 | 永久久久久久 | 激情综合激情五月俺也去 | 日美女逼视频 | 性欧美18~19sex高清播放 | 大地二资源网中文在线观看 | 99er热精品视频国产免费 | 粗长巨龙挤进新婚少妇未删版 | 亚洲同人在线播放 | 日本免费视频在线观看 | 久久6精品| 人人超碰人人爱超碰国产 | 久久精品国产99精品国产亚洲性色 | 亚洲成aⅴ人片久久青草影院 | 久久99精品久久久久久清纯直播 | 天海翼三点刺激高潮不停 | 小舞3d被吸乳羞羞在线观看 | 大帝av在线一区二区三区 | 动漫美女爆羞羞动漫在线蜜桃 | 全部免费毛片免费播放视频 | 精品福利一二区 | 亚洲国产综合精品中久 | 冲田杏梨AV天堂一区二区三区 | 欧美精品一区二区免费 | 国产精品香港三级国产av | 久久免费看片 | 黄色一级片在线观看 | 久久久在线视频 | 亚洲午夜综合 | 欧美日产国产精选三级特黄60分钟在线播放 | 光棍久久 | 欧美日本免费 | 啊轻点灬太粗嗯太深了用力漫画6 | 国产成人在线网址 | 阿娇囗交全套码在线观看 | 日日躁夜夜躁xxxxaaaa | 精品成av人一区二区三区 |