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

SQL Server 新舊資料庫字典比對:升級遷移必備腳本

     編輯:關於SqlServer

系統升級或資料遷移時,必須精確比對新舊資料庫的結構差異。本文提供一組完整的 T-SQL 腳本,利用暫存表 #old、#new 分別儲存舊庫與新庫的資料字典,再透過參數 @i 控制四種比對模式:新增欄位、刪除欄位、新增資料表、刪除資料表。適用於同一實例下的資料庫比對,建議以 sa 身分執行。

核心邏輯

  1. 切換至舊庫(USE temp),將資料字典寫入 #old。
  2. 切換至新庫(USE accdb),將資料字典寫入 #new。
  3. 依 @i 值執行對應比對:
  • @i = 1:新庫比舊庫新增的欄位(LEFT JOIN 找出 #old 為 NULL 的列)
  • @i = 2:舊庫比新庫多出的欄位(RIGHT JOIN 找出 #new 為 NULL 的列)
  • @i = 3:新庫新增的整張資料表([table] <> ALL (SELECT [table] FROM #old))
  • @i = 4:舊庫獨有的資料表([table] <> ALL (SELECT [table] FROM #new))

完整執行腳本

DECLARE @i INT;
SET @i = 4;  -- 依需求調整 1~4

USE temp;  -- 舊庫
SELECT ... INTO #old FROM ... WHERE sysobjects.xtype = 'U';

USE accdb;  -- 新庫
SELECT ... INTO #new FROM ... WHERE sysobjects.xtype = 'U';

IF @i = 1 BEGIN
    SELECT n.* FROM #new n LEFT JOIN #old o ON n.[table]=o.[table] AND n.field=o.field
    WHERE o.[table] IS NULL OR o.field IS NULL ORDER BY n.[table], n.field;
END ELSE IF @i = 2 BEGIN
    SELECT o.* FROM #new n RIGHT JOIN #old o ON n.[table]=o.[table] AND n.field=o.field
    WHERE n.[table] IS NULL OR n.field IS NULL ORDER BY o.[table], o.field;
END ELSE IF @i = 3 BEGIN
    SELECT * FROM #new WHERE [table] <> ALL (SELECT [table] FROM #old) ORDER BY [table], field;
END ELSE IF @i = 4 BEGIN
    SELECT * FROM #old WHERE [table] <> ALL (SELECT [table] FROM #new) ORDER BY [table], field;
END ELSE BEGIN
    SELECT '參數錯誤';
END

DROP TABLE #old;
DROP TABLE #new;

應用場景:上線前驗證結構同步、資料遷移差異分析、版本升級影響評估。腳本可進一步封裝為預存程序,整合至 CI/CD 流程中自動化比對。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved