首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

善用內建 TableDiff 工具快速比對與同步資料表資料

     編輯:關於SqlServer

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

實戰範例:同步 Dev 到 QA 環境

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 包含:

  1. 刪除目的端多餘列的 DELETE。
  2. 更新不匹配列的 UPDATE。
  3. 插入缺失列的 INSERT。
  4. 全部包裹在交易中,確保原子性。

適用場景與限制

適用不適用/注意
查核表、設定表、小型參考資料同步大型交易表(百萬列以上)執行時間長、鎖定久
複寫訂閱端資料修復含 text/ntext/image/FILESTREAM 欄位不支援
跨版本、跨版本實例比對需具備 sysadmin 或 db_owner 權限

進階技巧:整合至 SQL Agent 作業

-- 步驟 1: 建立 Proxy 帳號 (具備雙邊讀寫權限)
-- 步驟 2: 建立 Job 步驟類型 "Operating System (CmdExec)"
-- 命令: C:\Path\TableDiff.exe ... -f \\SharedFolder\Sync_$(ESCAPE_SQUOTE(STRTDT))_$(ESCAPE_SQUOTE(STRTTM)).sql
-- 步驟 3: 後續步驟用 sqlcmd 執行產生的腳本,或人工覆核後執行
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved