亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > SQL Server > 正文

SQL Server 2008中新增的 1.變更數據捕獲(CDC) 和 2.更改跟蹤

2024-08-31 00:55:49
字體:
來源:轉載
供稿:網友
SQL Server 2008中新增的 1.變更數據捕獲(CDC) 和 2.更改跟蹤

概述

1.變更數據捕獲(CDC) 

      每一次的數據操作都會記錄下來

2.更改跟蹤

      只會記錄最新一條記錄

 

以上兩種的區別:         http://blog.csdn.net/zjcxc/article/details/3975644

同步數據的應用:        http://blog.csdn.net/zjcxc/article/details/3924959

 

 

SQL Server 2008中SQL應用系列--目錄索引

本文主要介紹SQL Server中記錄數據變更的四個方法:觸發器、Output子句、變更數據捕獲(Change Data Capture 即CDC)功能、同步更改跟蹤。其中后兩個為SQL Server 2008所新增。

一、觸發器

在SQL Server的早期版本中,如果要記錄某個表或視圖的Insert/Update/Delete操作,我們可以借助觸發器(Trigger)(http://msdn.microsoft.com/zh-cn/library/ms189799.aspx), 這在數據量較小的情況下往往是有效的方式之一,其中后觸發器(After Trigger)只能跟蹤表的三個操作中的任意組合,而前觸發器(Instead Of trigger)可以處理表和視圖的更新(即使普通的Update View語句在某些列不明確的情況下報錯)。我們看兩個例子:

準備基礎數據:

[sql] view plaincopyPRint?

  1. USE testDb2 
  2. GO 
  3. --創建兩個測試表
  4. IF NOT OBJECT_ID('DepartDemo') IS NULL
  5. DROP TABLE [DepartDemo] 
  6. GO 
  7. IF NOT OBJECT_ID('DepartChangeLogs') IS NULL
  8. DROP TABLE [DepartChangeLogs] 
  9. GO 
  10. --測試表
  11. CREATE TABLE [dbo].[DepartDemo]( 
  12. [DID] [int] IDENTITY(101,1) NOT NULL PRIMARY KEY, 
  13. [DName] [nvarchar](200) NULL, 
  14. [DCode] [nvarchar](500) NULL, 
  15. [Manager] [nvarchar](50) NULL, 
  16. [ParentID] [int] NOT NULL DEFAULT ((0)), 
  17. [AddUser] [nvarchar](50) NULL, 
  18. [AddTime] [datetime] NULL, 
  19. [ModUser] [nvarchar](50) NULL, 
  20. [ModTime] [datetime] NULL, 
  21. [CurState] [smallint] NOT NULL DEFAULT ((0)), 
  22. [Remark] [nvarchar](500) NULL, 
  23. [F1] [int] NOT NULL DEFAULT ((0)), 
  24. [F2] [nvarchar](300) NULL
  25. GO 
  26. --記錄日志表
  27. CREATE TABLE [DepartChangeLogs] 
  28. ([LogID] [bigint] IDENTITY(1001,1) NOT NULL PRIMARY KEY, 
  29. [DID] [int] NOT NULL, 
  30. [DName] [nvarchar](200) NULL, 
  31. [DCode] [nvarchar](500) NULL, 
  32. [Manager] [nvarchar](50) NULL, 
  33. [ParentID] [int] NOT NULL DEFAULT ((0)), 
  34. [AddUser] [nvarchar](50) NULL, 
  35. [AddTime] [datetime] NULL, 
  36. [ModUser] [nvarchar](50) NULL, 
  37. [ModTime] [datetime] NULL, 
  38. [CurState] [smallint] NOT NULL DEFAULT ((0)), 
  39. [Remark] [nvarchar](500) NULL, 
  40. [F1] [int] NOT NULL DEFAULT ((0)), 
  41. [F2] [nvarchar](300) NULL, 
  42. [LogTime] DateTime Default(Getdate()) Not Null, 
  43. [InsOrUpd] char not null
  44. GO 

創建觸發器:

[sql] view plaincopyprint?

  1. /******* 創建一個After DML觸發器 ******/ 
  2. /********* 3w@live.cn 邀月***************/ 
  3. CREATE TRIGGER dbo.tri_LogDepartDemo 
  4. ON [dbo].[DepartDemo] 
  5. AFTER INSERT, Delete /************此處使用update與“Insert,Delete”效果是一樣的,邀月注 **********/ 
  6. AS
  7. SET NOCOUNT ON --屏蔽觸發器發送“受影響的行數”給應用程序
  8. -- Inserted rows
  9. INSERT [DepartChangeLogs] 
  10. (DID,[DName], [DCode], [Manager], [ParentID], 
  11. [AddUser], [AddTime], [ModUser], [ModTime], [CurState], [Remark], [F1], [F2], 
  12. LogTime, InsOrUPD) 
  13. SELECT DISTINCT DID,[DName], [DCode], [Manager], [ParentID], 
  14. [AddUser], [AddTime], [ModUser], [ModTime], [CurState], [Remark], [F1], [F2], 
  15. GETDATE(), 'I'
  16. FROM inserted i 
  17. -- Deleted rows
  18. INSERT [DepartChangeLogs] 
  19. (DID,[DName], [DCode], [Manager], [ParentID], 
  20. [AddUser], [AddTime], [ModUser], [ModTime], [CurState], [Remark], [F1], [F2], 
  21. LogTime, InsOrUPD) 
  22. SELECT DISTINCT DID,[DName], [DCode], [Manager], [ParentID], 
  23. [AddUser], [AddTime], [ModUser], [ModTime], [CurState], [Remark], [F1], [F2], 
  24. GETDATE(), 'D'
  25. FROM deleted d 
  26. GO 
  27. INSERT [dbo].[DepartDemo] ([DName], [DCode], [Manager], [ParentID], 
  28. [AddUser], [AddTime], [ModUser], [ModTime], [CurState], [Remark], [F1], [F2]) 
  29. VALUES (N'國家統計局房產審計一科', N'0', N'胡不歸', 0, N'DeomUser', 
  30. CAST(0x00009DF7017B6F96 AS DateTime), N'', CAST(0x0000000000000000 AS DateTime), 
  31. 1, N'專業評估全國房價,為老百姓謀福祉', 0, N'') 
  32. GO 
  33. ----該Update不會被觸發器記錄,但Update會生效
  34. UPDATE departDemo SET [Manager]='任我行' WHERE DID=101 
  35. GO 
  36. DELETE FROM departDemo where DID=101 
  37. GO 
  38. SELECT * FROM [DepartChangeLogs] 

統計效果: 邀月工作室 如果你覺得觸發器過于浪費,你可以試著根據某些字段以縮小觸發器的范圍

[sql] view plaincopyprint?

  1. /********* 使用DML觸發器記錄特定列的修改 ***/ 
  2. /********* 3w@live.cn 邀月***************/ 
  3. CREATE TRIGGER dbo.[tri_LogDepartDemo2] 
  4. ON [dbo].[DepartDemo] 
  5. AFTER Update
  6. AS
  7. IF Update([Manager]) 
  8. Begin
  9. print '該部門主管實行終身任免制,不得中途更改!'
  10. Rollback ----回滾Update操作
  11. End
  12. GO 
  13. UPDATE departDemo SET [Manager]='任我行' WHERE DID=101 
  14. GO 

執行結果: 邀月工作室 但觸發器的缺陷也是顯而易見的,使用觸發器請注意以下幾點:

1、觸發器通常很隱蔽,換句話說,易忘記,特別在檢查性能和邏輯問題時。

2、長時間運行的觸發器會嚴重減慢數據操作,特別是在數據頻繁修改的數據庫中。

3、不記錄日志的更新不會引起DML觸發器的觸發(如WRITETEXT、Trunacte table及批量插入操作)。

4、約束通常比觸發器運行更快。

5、處理某些邏輯時,存儲過程通常比觸發器要更易維護和管理。

6、不允許在觸發器中使用Select返回結果集。

關于觸發器的更多內容,請看MSDN(http://msdn.microsoft.com/zh-cn/library/ms189799.aspx)

二、使用Output子句

官方解釋:OutPut子句(http://technet.microsoft.com/zh-cn/library/ms177564.aspx)返回受 INSERT、UPDATE、DELETE 或 MERGE 語句影響的各行中的信息,或返回基于受這些語句影響的各行的表達式。 這些結果可以返回到處理應用程序,以供在確認消息、存檔以及其他類似的應用程序要求中使用。 也可以將這些結果插入表或表變量。 另外,您可以捕獲嵌入的 INSERT、UPDATE、DELETE 或 MERGE 語句中 OUTPUT 子句的結果,然后將這些結果插入目標表或視圖。

舉例:

[sql] view plaincopyprint?

  1. /********* 使用Output記錄表記錄的修改 *****/ 
  2. /********* 3w@live.cn 邀月***************/ 
  3. ----刪除前面的觸發器
  4. Drop TRIGGER dbo.[tri_LogDepartDemo] 
  5. DROP TRIGGER dbo.[tri_LogDepartDemo2] 
  6. INSERT [dbo].[DepartDemo] ([DName], [DCode], [Manager], [ParentID], 
  7. [AddUser], [AddTime], [ModUser], [ModTime], [CurState], [Remark], [F1], [F2]) 
  8. OUTPUT Inserted.*,getdate(),'I' ---注意這行是新增的
  9. INTO DepartChangeLogs ---注意這行是新增的
  10. VALUES (N'發改委', N'0', N'向問天', 0, N'DeomUser', 
  11. CAST(0x00009DF7017B6F96 AS DateTime), N'', CAST(0x0000000000000000 AS DateTime), 
  12. 1, N'油價,我說了算', 0, N'') 
  13. GO 
  14. SELECT * FROM [DepartChangeLogs] 

邀月工作室

注意:

1、從OUTPUT 中返回的列反映 INSERT、UPDATE 或 DELETE 語句完成之后但在觸發器執行之前的數據。

2、SQL Server 并不保證由使用 OUTPUT 子句的 DML 語句處理和返回行的順序。

3、與觸發器相比,OutPut子句可以直接處理Merge語句。

以上兩種方法各有千秋,在合適的情況下采取合適的方法才是明智的選擇,令人驚喜的是,SQL Server 2008起,為我們提供了更為強大的內建的方法-變更數據捕獲(CDC,http://msdn.microsoft.com/zh-cn/library/bb5002

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲精品v欧美精品v日韩精品| 国产成人高潮免费观看精品| 中文字幕欧美日韩在线| 亚洲第一在线视频| 亚洲资源在线看| 国产va免费精品高清在线| 黑人巨大精品欧美一区二区免费| 亚洲精品美女在线观看播放| 欧美做受高潮电影o| 欧美成人精品激情在线观看| 欧美超级乱淫片喷水| 北条麻妃99精品青青久久| 96国产粉嫩美女| 午夜精品一区二区三区在线视频| 亚洲精品久久久久中文字幕二区| 日韩在线观看电影| 性色av香蕉一区二区| 正在播放欧美一区| 欧美高清视频在线| 欧美视频在线观看免费网址| 亚洲国产日韩欧美在线99| 96pao国产成视频永久免费| 日韩av第一页| 日韩免费观看av| 欧美黑人视频一区| 日本精品久久久| 中文字幕日韩欧美精品在线观看| 欧美精品在线免费播放| 亚洲有声小说3d| 日韩欧美一区二区在线| 欧美极品少妇xxxxⅹ免费视频| 亚洲欧美变态国产另类| 97成人超碰免| 国产精品久久久久久亚洲影视| 国产在线视频2019最新视频| 欧美日韩中国免费专区在线看| 亚洲国产小视频在线观看| 欧美一二三视频| 欧美日韩色婷婷| 亚洲女人天堂av| 亚洲人高潮女人毛茸茸| 久久免费少妇高潮久久精品99| 国产美女精品视频| 亚洲bt欧美bt日本bt| 精品国产一区二区三区四区在线观看| 日韩在线观看免费av| 一区二区三区日韩在线| 久久精品一偷一偷国产| 亚洲成人精品视频在线观看| 国产日韩专区在线| y97精品国产97久久久久久| 国产成人欧美在线观看| 九色精品美女在线| 久久精品99久久香蕉国产色戒| 欧洲精品在线视频| 欧美日韩国产页| 日韩av网站在线| 91精品久久久久久久久久| 国产精品一区=区| 91精品国产色综合久久不卡98口| 精品国产欧美一区二区五十路| 亚洲人成伊人成综合网久久久| 国产精品网红直播| 欧美成人精品在线视频| 国产精品伦子伦免费视频| 亚洲性线免费观看视频成熟| 亚洲精品福利在线观看| 日韩免费在线观看视频| 一本色道久久综合狠狠躁篇的优点| 91精品综合视频| 亚洲成年人影院在线| 日韩成人在线视频| 久久久久久久香蕉网| 91九色综合久久| 日韩中文字幕免费视频| 欧美日韩在线影院| xxxx欧美18另类的高清| 2019国产精品自在线拍国产不卡| 国产一区二区日韩| 国产成人免费av电影| 欧美精品在线观看| 久久91精品国产91久久久| 欧美日韩国产精品专区| 色无极亚洲影院| 日韩av大片在线| 4k岛国日韩精品**专区| 在线丨暗呦小u女国产精品| 欧美日韩免费在线观看| 欧美日本啪啪无遮挡网站| 久久久之久亚州精品露出| 欧美福利视频在线| 欧美激情网站在线观看| 国产精自产拍久久久久久| 亚洲欧美国产精品久久久久久久| 精品中文字幕乱| 精品久久久中文| 亚洲欧美资源在线| 国产成人97精品免费看片| 亚洲国产精品悠悠久久琪琪| 日日摸夜夜添一区| 91免费版网站入口| 久久99久久99精品免观看粉嫩| 日本aⅴ大伊香蕉精品视频| 亚洲一级免费视频| 欧美老女人性视频| 欧美精品久久久久久久免费观看| 亚洲第一中文字幕在线观看| 97成人超碰免| 亚洲国产精品久久久久秋霞不卡| 自拍偷拍亚洲一区| 国产精品狠色婷| 欧美性猛交xxxx免费看漫画| 亚洲第一国产精品| 在线看片第一页欧美| 亚洲国产成人一区| 久久噜噜噜精品国产亚洲综合| 在线播放国产精品| 正在播放欧美一区| 国产成人精品a视频一区www| 欧美高清一级大片| 国产精品一区二区在线| 亚洲美女av网站| 欧美一区二区影院| 久久久免费在线观看| 色噜噜亚洲精品中文字幕| 欧美一级淫片videoshd| 伊人伊成久久人综合网小说| 久久久精品视频成人| 亚洲成色999久久网站| 欧美疯狂xxxx大交乱88av| 久久精品国产91精品亚洲| 欧美成人免费视频| 久久视频免费观看| 日韩av网站大全| 日韩在线观看免费全集电视剧网站| 久久精品国产一区二区电影| 久久免费国产视频| 亚洲日本成人网| 国产精品扒开腿做爽爽爽男男| 国产在线一区二区三区| 成人黄色片在线| 欧美一区二区三区免费观看| 一区二区三区四区在线观看视频| 亚洲欧美日韩图片| 欧美日韩xxxxx| 亚洲欧美在线一区二区| 欧美午夜精品久久久久久浪潮| 亚洲综合在线小说| 亚洲女成人图区| 日韩中文在线不卡| 欧美一级黑人aaaaaaa做受| 日韩一二三在线视频播| 久久精彩免费视频| 亚洲少妇激情视频| 久久手机精品视频| 91精品国产精品| 中文字幕精品视频| 欧美福利视频网站| 国产精品自在线| 日韩视频免费大全中文字幕| 亚洲国产精品va在线看黑人动漫| 成人黄色大片在线免费观看| 亚洲色图激情小说| 久久久噜久噜久久综合|