淺析SQL2008的Change Data Capture功能(2)_Mssql數(shù)據(jù)庫教程
推薦:如何使用SQL Server嵌套子查詢很多SQL Server程序員對子查詢(subqueries)的使用感到困惑,尤其對于嵌套子查詢(即子查詢中包含一個子查詢)�,F(xiàn)在,就讓我們追本溯源地探究這個問題。 有兩種子查詢類型:標準和相關(guān)。標
3、然后在TestCDC數(shù)據(jù)庫中創(chuàng)建測試表
USE TestCDC |
4、在dbo.Product表上激活更新跟蹤
EX |
成功提交上述命令后,就可以在數(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語句
|
提交完這條命令后,當然也會在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
|
提交完這條命令后,在dbo_Product_CT中又看到兩條新記錄了。其中dbo_Product_CT表中的_$operation字段的值是第一條是3,第二條是4,_$update_mask字段的值兩條都是0x04。(看來CDC確實會記錄下數(shù)據(jù)的每次修改。)
8、繼續(xù)在Product表上提交DML語句
|
提交完了這條命令后,就會在lsn_time_mapping和dbo_Product_CT中分別看到一條新記錄。
其中dbo_Product_CT表中的_$operation字段的值是1,_$update_mask字段的值是0x07。
9、提交一個DDL試試看
|
提交完這句命令后,只會在ddl_history表中看到一條新的記錄。
10、然后再試試DML
|
提交完這句語句后,所有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標準。不
- sql 語句練習(xí)與答案
- 深入C++ string.find()函數(shù)的用法總結(jié)
- SQL Server中刪除重復(fù)數(shù)據(jù)的幾個方法
- sql刪除重復(fù)數(shù)據(jù)的詳細方法
- SQL SERVER 2000安裝教程圖文詳解
- 使用sql server management studio 2008 無法查看數(shù)據(jù)庫,提示 無法為該請求檢索數(shù)據(jù) 錯誤916解決方法
- SQLServer日志清空語句(sql2000,sql2005,sql2008)
- Sql Server 2008完全卸載方法(其他版本類似)
- sql server 2008 不允許保存更改,您所做的更改要求刪除并重新創(chuàng)建以下表
- SQL Server 2008 清空刪除日志文件(瞬間日志變幾M)
- Win7系統(tǒng)安裝MySQL5.5.21圖解教程
- 將DataTable作為存儲過程參數(shù)的用法實例詳解
Mssql數(shù)據(jù)庫教程Rss訂閱編程教程搜索
Mssql數(shù)據(jù)庫教程推薦
- SQL操作全集(部分是Mssql語句,不在access中使用)
- SQL SERVER與ACCESS、EXCEL的數(shù)據(jù)轉(zhuǎn)換
- 總結(jié)經(jīng)典常用的SQL語句(1)
- 解決SQL查詢中的轉(zhuǎn)義序列不對的方法
- 黑客經(jīng)驗談 MSSQL SA權(quán)限入侵的感悟
- 揭秘在 SQL Server 數(shù)據(jù)庫開發(fā)中的十大問題
- 淺談SQL Server數(shù)據(jù)庫優(yōu)化經(jīng)驗總結(jié)
- 解析SQL Server 2008對T-SQL語言的增強
- 解答使用SQL Server數(shù)據(jù)庫查詢累計值的方法
- SQL Server 2008 數(shù)據(jù)加載創(chuàng)世界記錄
猜你也喜歡看這些
- 基于一致性hash算法(consistent hashing)的使用詳解
- 關(guān)于MySQL數(shù)據(jù)遷移--data目錄直接替換注意事項的詳解
- 深入mysql "ON DUPLICATE KEY UPDATE" 語法的分析
- sql語句:拷貝表,復(fù)制表
- 基于mysql查詢語句的使用詳解
- 擁有5星評級數(shù)據(jù)庫表結(jié)構(gòu) 如何才能更高效的使用?
- 解析:內(nèi)聯(lián),左外聯(lián),右外聯(lián),全連接,交叉連接的區(qū)別
- 深入SQLite基本操作的總結(jié)詳解
- JDBC數(shù)據(jù)庫的使用操作總結(jié)
- 解析mysql中:單表distinct、多表group by查詢?nèi)コ貜?fù)記錄
- 相關(guān)鏈接:
- 教程說明:
Mssql數(shù)據(jù)庫教程-淺析SQL2008的Change Data Capture功能(2)
。