SQL Server 隨附的 TableDiff.exe 是一款輕量級命令列工具,可比對兩張資料表的資料差異並產生同步 T-SQL 腳本,無需購買第三方比對工具,極適合開發/測試/正式環境的查核表同步、複寫修復場景。
-- 典型路徑 (SQL 2005/2008/2012/2014/2016/2017/2019)
C:\Program Files\Microsoft SQL Server\<版本>\COM\TableDiff.exe
-- 基本參數
TableDiff -sourceserver SRV1 -sourcedatabase DB1 -sourcetable TableA \
-destinationserver SRV2 -destinationdatabase DB2 -destinationtable TableA \
-f C:\SyncScripts\Sync_TableA.sql
REM 比對並產生 INSERT/UPDATE/DELETE 腳本
TableDiff -sourceserver DEVSQL -sourcedatabase AppDB -sourcetable dbo.LookupCodes \
-destinationserver QASQL -destinationdatabase AppDB -destinationtable dbo.LookupCodes \
-et Diff_Errors.txt -f Sync_LookupCodes.sql -strict
REM 參數說明
-strict : 嚴格比對(含資料類型、NULL 屬性、Collation)
-et : 錯誤記錄檔
-f : 輸出同步腳本檔案
-q : 快速模式(僅比對資料列計數與 Checksum,不產生腳本)
-rc:n : 重試次數(網路不穩時)
-b : 批次大小(大量資料時調整)
產生的 .sql 包含:
DELETE。UPDATE。INSERT。| 適用 | 不適用/注意 |
|---|---|
| 查核表、設定表、小型參考資料同步 | 大型交易表(百萬列以上)執行時間長、鎖定久 |
| 複寫訂閱端資料修復 | 含 text/ntext/image/FILESTREAM 欄位不支援 |
| 跨版本、跨版本實例比對 | 需具備 sysadmin 或 db_owner 權限 |
-- 步驟 1: 建立 Proxy 帳號 (具備雙邊讀寫權限)
-- 步驟 2: 建立 Job 步驟類型 "Operating System (CmdExec)"
-- 命令: C:\Path\TableDiff.exe ... -f \\SharedFolder\Sync_$(ESCAPE_SQUOTE(STRTDT))_$(ESCAPE_SQUOTE(STRTTM)).sql
-- 步驟 3: 後續步驟用 sqlcmd 執行產生的腳本,或人工覆核後執行