The tablediff utility is used to compare the data in two tables for non-convergence, and is particularly useful for troubleshooting non-convergence in a replication topology. This utility can be used from the command prompt or in a batch file to perform the following tasks:
-
A row by row comparison between a source table in an instance of Microsoft SQL Server acting as a replication Publisher and the destination table at one or more instances of SQL Server acting as replication Subscribers.
-
Perform a fast comparison by only comparing row counts and schema.
-
Perform column-level comparisons.
-
Generate a Transact-SQL script to fix discrepancies at the destination server to bring the source and destination tables into convergence.
-
Log results to an output file or into a table in the destination database.
tablediff
[ -? ] |
{
-sourceserver source_server_name[\instance_name]
-sourcedatabase source_database
-sourcetable source_table_name
[ -sourceschema source_schema_name ]
[ -sourcepassword source_password ]
[ -sourceuser source_login ]
[ -sourcelocked ]
-destinationserver destination_server_name[\instance_name]
-destinationdatabase subscription_database
-destinationtable destination_table
[ -destinationschema destination_schema_name ]
[ -destinationpassword destination_password ]
[ -destinationuser destination_login ]
[ -destinationlocked ]
[ -b large_object_bytes ]
[ -bf number_of_statements ]
[ -c ]
[ -dt ]
[ -et table_name ]
[ -f [ file_name ] ]
[ -o output_file_name ]
[ -q ]
[ -rc number_of_retries ]
[ -ri retry_interval ]
[ -strict ]
[ -t connection_timeouts ]
}
- [ -? ]
-
Returns the list of supported parameters.
-
-sourceserver source_server_name[\instance_name]
-
Is the name of the source server. Specify source_server_name for the default instance of SQL Server. Specify source_server_name\instance_name for a named instance of SQL Server.
-
-sourcedatabase source_database
-
Is the name of the source database.
-
-sourcetable source_table_name
-
Is the name of the source table being checked.
-
-sourceschema source_schema_name
-
The schema owner of the source table. By default, the table owner is assumed to be dbo.
-
-sourcepassword source_password
-
Is the password for the login used to connect to the source server using SQL Server Authentication.
Security Note: |
|---|
|
When possible, supply security credentials at runtime. If you must store credentials in a script file, you should secure the file to prevent unauthorized access.
|
-
-sourceuser source_login
-
Is the login used to connect to the source server using SQL Server Authentication. If source_login is not supplied, then Windows Authentication is used when connecting to the source server. When possible, use Windows Authentication.
-
-sourcelocked
-
The source table is locked during the comparison using the TABLOCK and HOLDLOCK table hints.
-
-destinationserver destination_server_name[\instance_name]
-
Is the name of the destination server. Specify destination_server_name for the default instance of SQL Server. Specify destination_server_name\instance_name for a named instance of SQL Server.
-
-destinationdatabase subscription_database
-
Is the name of the destination database.
-
-destinationtable destination_table
-
Is the name of the destination table.
-
-destinationschema destination_schema_name
-
The schema owner of the destination table. By default, the table owner is assumed to be dbo.
-
-destinationpassword destination_password
-
Is the password for the login used to connect to the destination server using SQL Server Authentication.
Security Note: |
|---|
|
When possible, supply security credentials at runtime. If you must store credentials in a script file, you should secure the file to prevent unauthorized access.
|
-
-destinationuser destination_login
-
Is the login used to connect to the destination server using SQL Server Authentication. If destination_login is not supplied, then Windows Authentication is used when connecting to the server. When possible, use Windows Authentication.
-
-destinationlocked
-
The destination table is locked during the comparison using the TABLOCK and HOLDLOCK table hints.
-
-b large_object_bytes
-
Is the number of bytes to compare for large object data type columns, which includes: text, ntext, image, varchar(max), nvarchar(max) and varbinary(max). large_object_bytes defaults to the size of the column. Any data above large_object_bytes will not be compared.
-
-bf
number_of_statements
-
Is the number of Transact-SQL statements to write to the current Transact-SQL script file when the -f option is used. When the number of Transact-SQL statements exceeds number_of_statements, a new Transact-SQL script file is created.
-
-c
-
Compare column-level differences.
-
-dt
-
Drop the result table specified by table_name, if the table already exists.
-
-et table_name
-
Specifies the name of the result table to create. If this table already exists, -DT must be used or the operation will fail.
-
-f [ file_name ]
-
Generates a Transact-SQL script to bring the table at the destination server into convergence with the table at the source server. You can optionally specify a name and path for the generated Transact-SQL script file. If file_name is not specified, the Transact-SQL script file is generated in the directory where the utility runs.
-
-o output_file_name
-
Is the full name and path of the output file.
-
-q
-
Perform a fast comparison by only comparing row counts and schema.
-
-rc number_of_retries
-
Number of times that the utility retries a failed operation.
-
-ri
retry_interval
-
Interval, in seconds, to wait between retries.
-
-strict
-
Source and destination schema are strictly compared.
-
-t connection_timeouts
-
Sets the connection timeout period, in seconds, for connections to the source server and destination server.
|
Value
|
Description
|
|---|
|
0
|
Success
|
|
1
|
Critical error
|
|
2
|
Table differences
|
The tablediff utility cannot be used with non-SQL Server servers.
Tables with sql_variant data type columns are not supported.
By default, the tablediff utility supports the following data type mappings between source and destination columns.
|
Source data type
|
Destination data type
|
|---|
|
tinyint
|
smallint, int, or bigint
|
|
smallint
|
int or bigint
|
|
int
|
bigint
|
|
timestamp
|
varbinary
|
|
varchar(max)
|
text
|
|
nvarchar(max)
|
ntext
|
|
varbinary(max)
|
image
|
|
text
|
varchar(max)
|
|
ntext
|
nvarchar(max)
|
|
image
|
varbinary(max)
|
Use the -strict option to disallow these mappings and perform a strict validation.
The source table in the comparison must contain at least one primary key, identity, or ROWGUID column. When you use the -strict option, the destination table must also have a primary key, identity, or ROWGUID column.
The Transact-SQL script generated to bring the destination table into convergence does not include the following data types:
-
varchar(max)
-
nvarchar(max)
-
varbinary(max)
-
timestamp
-
xml
-
text
-
ntext
-
image
To compare tables, you need SELECT ALL permissions on the table objects being compared.
To use the -et option, you must be a member of the db_owner fixed database role, or at least have CREATE TABLE permission in the subscription database and ALTER permission on the destination owner schema at the destination server.
To use the -dt option, you must be a member of the db_owner fixed database role, or at least have ALTER permission on the destination owner schema at the destination server.
To use the -o or -f options, you must have write permissions to the specified file directory location.
Other Resources
How to: Compare Replicated Tables for Differences (Replication Programming)
Help and Information
Getting SQL Server 2008 Assistance