5.18. Capturing Changes to Data in a SQL Server Database
Problem
You need to automatically capture changes made to data in a table in a SQL Server 2008 database.
Solution
Use change data capture as shown in this solution.
The solution uses a table named CaptureDataChanges
in the AdoDotNet35Cookbook
database. Execute the following T-SQL statement to create the table:
USE AdoDotNet35Cookbook GO CREATE TABLE CaptureDataChanges ( Id int NOT NULL PRIMARY KEY, Field1 nvarchar(50) NULL, Field2 nvarchar(50) NULL )
The solution needs some sample data in the table CaptureDataChanges
. Create the data by executing the following T-SQL batch:
USE AdoDotNet35Cookbook GO INSERT INTO CaptureDataChanges VALUES (1, 'Field1.1', 'Field2.1') INSERT INTO CaptureDataChanges VALUES (2, 'Field1.2', 'Field2.2') INSERT INTO CaptureDataChanges VALUES (3, 'Field1.3', 'Field2.3')
You need to enable change data capture on the database that you want to monitor. Do this by executing the stored procedure sys.sp_cdc_enable_db_change_data_capture
in the database. For the AdoDotNet35Cookbook
database used in this solution, execute the following command:
USE AdoDotNet35Cookbook GO sys.sp_cdc_enable_db_change_data_capture
Once CDC is enabled on the database, a new user cdc
is created, a new user role cdc_admin
is created, and five CDC tables are created in the database:
cdc.captured_columns
cdc.change_tables
cdc.ddl_history
cdc.index_columns
cdc.lsn_time_mapping
Verify that data capture is enabled on the database by querying the ...
Get ADO.NET 3.5 Cookbook, 2nd Edition now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.