tablediff 公用程式

適用於:SQL ServerAzure SQL DatabaseAzure SQL 受控執行個體Azure Synapse AnalyticsAnalytics Platform System (PDW)

tablediff公用程式可用來比較兩個數據表中的資料以進行非聚合,而且對於針對複寫拓撲中的非融合進行疑難排解很有用。 您可以在命令提示字元之下,或在批次檔中,利用這個公用程式來執行下列工作:

  • 做為複寫發行者 SQL Server之實例中來源資料表的資料列比較,以及做為複寫訂閱者之一或多個實例SQL Server目的地資料表之間的資料列比較。

  • 執行快速比較,只比較資料列計數和結構描述。

  • 進行資料行層級的比較。

  • 產生 Transact-SQL 指令碼來修正目的地伺服器不一致的情形,以便聚合來源和目的地資料表。

  • 將結果記錄在輸出檔中,或記錄在目的地資料庫的資料表中。

注意

tablediff公用程式是SQL Server 複寫工具的一部分。 在 SQL Server 2022 (16.x) 中, tablediff.exe 一旦安裝複寫功能,就可以在 的預設位置 C:\Program Files\Microsoft SQL Server\160\COM 找到。

語法

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 ]
}

引數

[ -? ]

傳回支援的參數清單。

-sourceserver source_server_name[ \instance_name ]

指定來源伺服器的名稱。 指定 SQL Server 預設執行個體的 source_server_name。 為 SQL Server 的具名執行個體指定 source_server_name\instance_name

-sourcedatabase source_database

指定源資料庫的名稱。

-sourcetable source_table_name

指定要檢查的來源資料表名稱。

-sourceschema source_schema_name

來源資料表的結構描述擁有者。 依預設,資料表擁有者假設為 dbo。

-sourcepassword source_password

指定用來使用 SQL Server Authentication 連線到來源伺服器之登入的密碼。

重要

可能的話,請在執行階段提供安全性認證。 如果您必須將認證儲存在指令碼檔案中,您應該維護這個檔案的安全性,使他人無法在未獲授權的情況下擅自存取。

-sourceuser source_login

指定用來使用 SQL Server Authentication 連接到來源伺服器的登入。 如果未提供 source_login ,則會在連線到來源伺服器時使用 Windows 驗證。 儘可能使用 Windows 驗證。

-sourcelocked

在比較期間,來源資料表以 TABLOCK 和 HOLDLOCK 資料表提示鎖定。

-destinationserver destination_server_name[\instance_name]

指定目的地伺服器的名稱。 指定 SQL Server 預設執行個體的 destination_server_name。 為 SQL Server 的具名執行個體指定 destination_server_name\instance_name

-destinationdatabase subscription_database

指定目的地資料庫的名稱。

-destinationtable destination_table

指定目的地資料表的名稱。

-destinationschema destination_schema_name

目的地資料表的結構描述擁有者。 依預設,資料表擁有者假設為 dbo。

-destinationpassword destination_password

指定用來使用 SQL Server Authentication 連線到目的地伺服器之登入的密碼。

重要

可能的話,請在執行階段提供安全性認證。 如果您必須將認證儲存在指令碼檔案中,您應該維護這個檔案的安全性,使他人無法在未獲授權的情況下擅自存取。

-destinationuser destination_login

指定用來使用 SQL Server Authentication 連接到目的地伺服器的登入。 如果未提供 destination_login ,則會在連線到伺服器時使用 Windows 驗證。 儘可能使用 Windows 驗證。

-destinationlocked

在比較期間,目的地資料表以 TABLOCK 和 HOLDLOCK 資料表提示鎖定。

-b large_object_bytes

指定要比較大型物件資料類型資料行的位元組數目,其中包括 textNtextimageVarchar (max) Nvarchar (max ) 和 Varbinary (max) large_object_bytes 預設為資料行的大小。 不會比較大於 large_object_bytes 的任何資料。

-bf number_of_statements

指定使用 選項時 -f 要寫入目前 Transact-SQL 腳本檔案的 Transact-SQL 語句數目。 當 Transact-SQL 陳述式數目超出 number_of_statements 時,會建立新的 Transact-SQL 指令碼檔案。

-c

比較資料行層級的差異。

-dt

卸除 table_name指定的結果資料表 (如果該資料表已存在的話)。

-et table_name

指定要建立的結果資料表名稱。 如果此資料表已經存在, -DT 則必須使用 ,否則作業會失敗。

-f [ file_name ]

產生一份 Transact-SQL 指令碼來聚合目的地伺服器的資料表與來源伺服器的資料表。 您可以選擇性地為所產生的 Transact-SQL 指令碼檔案指定名稱和路徑。 如果未指定 file_name ,則會在公用程式執行所在的目錄中產生 Transact-SQL 腳本檔案。

-o output_file_name

指定輸出檔的完整名稱和路徑。

-Q

執行快速比較,只比較資料列計數和結構描述。

-rc number_of_retries

公用程式重試失敗作業的次數。

-ri retry_interval

兩次重試之間等待的間隔秒數。

-strict

嚴格比較來源和目的地結構描述。

-t connection_timeouts

設定通往來源伺服器和目的地伺服器之連接的連接逾時期限 (以秒為單位)。

傳回值

描述
0 Success
1 嚴重錯誤
2 資料表差異

備註

tablediff公用程式無法與非SQL Server伺服器搭配使用。

不支援具有 SQL_variant 資料類型資料行的資料表。

根據預設, tablediff 公用程式支援來源和目的地資料行之間的下列資料類型對應。

來源資料類型 目的地資料類型
tinyint smallintintbigint
smallint intbigint
int bigint
timestamp varbinary
varchar(max) text
nvarchar(max) ntext
varbinary(max) image
text varchar(max)
ntext nvarchar(max)
image varbinary(max)

-strict使用 選項來禁止這些對應並執行嚴格的驗證。

比較中的來源資料表必須至少包含一個主索引鍵、身分識別或 ROWGUID 資料行。 當您使用 選項時 -strict ,目的地資料表也必須有主鍵、身分識別或 ROWGUID 資料行。

產生以將目的地資料表帶入聚合的 Transact-SQL 腳本不包含下列資料類型:

  • varchar(max)
  • nvarchar(max)
  • varbinary(max)
  • timestamp
  • xml
  • text
  • ntext
  • image

權限

若要比較資料表,您必須具有所比較之資料表物件的 SELECT ALL 權限。

若要使用 -et 選項,您必須是固定資料庫角色db_owner成員,或至少在訂閱資料庫中具有 CREATE TABLE 許可權,以及目的地伺服器上目的地擁有者架構的 ALTER 許可權。

若要使用 -dt 選項,您必須是固定資料庫角色db_owner成員,或至少具有目的地伺服器目的地擁有者架構的 ALTER 許可權。

若要使用 -o-f 選項,您必須具有指定檔案目錄位置的寫入權限。

另請參閱