日韩天天综合网_野战两个奶头被亲到高潮_亚洲日韩欧美精品综合_av女人天堂污污污_视频一区**字幕无弹窗_国产亚洲欧美小视频_国内性爱精品在线免费视频_国产一级电影在线播放_日韩欧美内地福利_亚洲一二三不卡片区

淺析SQL2008的Change Data Capture功能(2)_Mssql數(shù)據(jù)庫教程

編輯Tag賺U幣
教程Tag:暫無Tag,歡迎添加,賺取U幣!

推薦:如何使用SQL Server嵌套子查詢
很多SQL Server程序員對子查詢(subqueries)的使用感到困惑,尤其對于嵌套子查詢(即子查詢中包含一個子查詢)�,F(xiàn)在,就讓我們追本溯源地探究這個問題。 有兩種子查詢類型:標準和相關(guān)。標

3、然后在TestCDC數(shù)據(jù)庫中創(chuàng)建測試表

USE TestCDC
GO
CREATE TABLE dbo.Product (ProductID int PRIMARY KEY NOT NULL,
ProductName nvarchar(100),
Category nvarchar(50))
GO


4、在dbo.Product表上激活更新跟蹤

EX

EC sp_cdc_enable_table_change_data_capture 'dbo',
'Product', @role_name= NULL, @supports_net_changes =1;

成功提交上述命令后,就可以在數(shù)據(jù)表change_tables,captured_columns和index_columns表中看到相應(yīng)的記錄,其中change_table中一條,capture_column中三條,index_columns中一條。同時cdc架構(gòu)下有增加了一張新表叫做dbo_Product_CT,這張表的結(jié)構(gòu)和Product表的結(jié)構(gòu)有點相似,Product表中的三列在dbo_Product_CT中都有,同時dbo_Product_CT表中還增加了_$start_lsn,_$end_lsn,_$seqval,_$operation和_$update_mask五個新的字段。ITPUB個人空間-hU:i B%P%B&X
其實在存儲過程sp_cdc_enable_table_change_data_capture中有一系列的參數(shù),在這里我們?yōu)榱撕喕雎粤艘粋參數(shù)就是@captured_column_list,這個參數(shù)可以對表中特定的某些字段啟用更新跟蹤。

5、在Product表上提交INSERT語句

INSERT INTO dbo.Product VALUES (1, N'ABC', N'A');

提交完了這條命令后,就會在lsn_time_mapping和dbo_Product_CT中分別看到一條新記錄。

其中dbo_Product_CT表中的_$operation字段的值是2,_$update_mask字段的值是0x07。 _$operation字段是代表DML操作類型,1是delete,2是insert,3是update的舊值,4是update的新值。
$update_mask字段是表示一個字段列表的掩碼,那些在DML操作中被更新了的字段位為1,而沒有更新的字段位為0。在本例中Product表一共有三列被跟蹤,所以應(yīng)該是一個三位的二進制數(shù),右邊低位第一位是第一列ProductID,低位第二位是第二列ProductName,第三位就是Category了。因為這是一次INSERT,所以更新涉及到了所有的三列,所以_$update_mask字段就應(yīng)該是0x7了。

6、 繼續(xù)在Product表上提交UPDATE語句

UPDATE dbo.Product SET Category = N'B' WHERE ProductID = 1;

提交完這條命令后,當然也會在lsn_time_mapping和dbo_Product_CT中看到新記錄了。不過這次lsn_time_mapping中是一條,而dbo_Product_CT中則是兩條。(為什么會這樣呢?建議大家自己試一下咯,一試就明白了。)


其中dbo_Product_CT表中的_$operation字段的值是第一條是3,第二條是4,_$update_mask字段的值兩條都是0x04。


在這次操作中我們更新的是第三列,所以_$update_mask字段就應(yīng)該是0x4了。(如果我們更新的是ProductID會發(fā)現(xiàn)_$update_mask并非是0x1,而同樣是0x7,這估計是因為ProductID是主鍵,更新主鍵應(yīng)該視同一條新的記錄。)

7、再來一次UPDATE

UPDATE dbo.Product SET Category = N'A' WHERE ProductID = 1;

提交完這條命令后,在dbo_Product_CT中又看到兩條新記錄了。其中dbo_Product_CT表中的_$operation字段的值是第一條是3,第二條是4,_$update_mask字段的值兩條都是0x04。(看來CDC確實會記錄下數(shù)據(jù)的每次修改。)

8、繼續(xù)在Product表上提交DML語句

DELETE dbo.Product WHERE ProductID = 1;

提交完了這條命令后,就會在lsn_time_mapping和dbo_Product_CT中分別看到一條新記錄。


其中dbo_Product_CT表中的_$operation字段的值是1,_$update_mask字段的值是0x07。

9、提交一個DDL試試看

ALTER TABLE dbo.Product ADD Description nvarchar(100);

提交完這句命令后,只會在ddl_history表中看到一條新的記錄。


10、然后再試試DML

UPDATE dbo.Product SET Description = N'NA';

提交完這句語句后,所有cdc架構(gòu)下的表中都沒有看到新記錄。說明新增的列Description不跟蹤更新了......估計有人會說(細心的人哦!):“這次當然看不到新記錄了,因為在前面第7步我們已經(jīng)刪除了所有的記錄,因此這次的UPDATE語句沒有影響到任何記錄,當然CDC的表中不會有任何記錄了。”那么到底對Description更新會不會記錄呢,經(jīng)過測試確實是不記錄的。

那么如果我們想對Description也進行更新跟蹤應(yīng)該怎么辦呢?很簡單的,由另外一個存儲過程叫做sp_cdc_disable_table_change_data_capture可以禁用對某張表的更新跟蹤,可以使用這個存儲過程先對Product表禁用更新跟蹤,然后再重新啟用對Product表的更新跟蹤就可以了。

分享:SQL多表格查詢合并至單一聲明的常用方式
在對跨多個表格的數(shù)據(jù)進行組合時,有時很難搞清楚要使用哪一個SQL句法。我將在這里對將多個表格中的查詢合并至單一聲明中的常用方式進行闡述。 在這篇文章中的樣本查詢符合SQL92 ISO標準。不

來源:模板無憂//所屬分類:Mssql數(shù)據(jù)庫教程/更新時間:2008-08-22
相關(guān)Mssql數(shù)據(jù)庫教程