1. 程式人生 > 其它 >SQL SERVER 比較兩個資料庫的差異性

SQL SERVER 比較兩個資料庫的差異性

有時候部署伺服器正式版與測試版資料庫的時候

總會有忘記某些欄位同步更新的問題

不管是欄位型別 或是欄位名稱. 然後等待著的就是一堆的錯誤日誌.

所以一直想找一款可以查詢資料庫差異性的指令碼或軟體

執行以下SQL語句,檢視資料庫差異性

-- u表,p儲存過程,v檢視
-- INTFSIMSNEW新庫,INTFSIMS舊庫

SELECT NTABLE = A.NAME, OTABLE = B.NAME
FROM INTFSIMSNEW..SYSOBJECTS A
  LEFT JOIN INTFSIMS..SYSOBJECTS B
    ON A.NAME = B.NAME
WHERE ISNULL
(B.NAME, '') = '' AND A.XTYPE = 'U' UNION ALL SELECT NTABLE = B.NAME, OTABLE = A.NAME FROM INTFSIMS..SYSOBJECTS A LEFT JOIN INTFSIMSNEW..SYSOBJECTS B ON A.NAME = B.NAME WHERE ISNULL(B.NAME, '') = '' AND A.XTYPE = 'U' ORDER BY 1, 2 -- 比較兩個資料庫中每個表字段的差異 SELECT 表名A = CASE WHEN ISNULL(A.TABLENAME, ''
) <> '' THEN A.TABLENAME ELSE B.TABLENAME END, 欄位名A = A.FIELDNAME, 欄位名B = B.FIELDNAME, 順序= A.FIELDSNO, 說明= CASE WHEN A.FIELDTYPE <> B.FIELDTYPE THEN '型別: ' + A.FIELDTYPE + '-->' + B.FIELDTYPE WHEN A.FIELDSNO <> B.FIELDSNO THEN '順序: ' + str(A.FIELDSNO) + '-->
' + str(B.FIELDSNO) WHEN A.LENGTH <> B.LENGTH THEN '長度: ' + str(A.LENGTH) + '-->' + str(B.LENGTH) WHEN A.LENSEC <> B.LENSEC THEN '小數位: ' + str(A.LENSEC) + '-->' + str(B.LENSEC) WHEN A.ALLOWNULL <> B.ALLOWNULL THEN '允許空值: ' + str(A.ALLOWNULL) + '-->' + str(B.ALLOWNULL) END FROM (SELECT TABLENAME = B.NAME, FIELDNAME = A.NAME, FIELDSNO = A.COLID, FIELDTYPE = C.NAME, LENGTH = A.LENGTH, LENSEC = A.XSCALE, ALLOWNULL = A.ISNULLABLE FROM INTFSIMSNEW..SYSCOLUMNS A LEFT JOIN INTFSIMSNEW..SYSOBJECTS B ON A.ID = B.ID LEFT JOIN INTFSIMSNEW..SYSTYPES C ON A.XUSERTYPE = C.XUSERTYPE WHERE B.XTYPE = 'U') A FULL JOIN (SELECT TABLENAME = B.NAME, FIELDNAME = A.NAME, FIELDSNO = A.COLID, FIELDTYPE = C.NAME, LENGTH = A.LENGTH, LENSEC = A.XSCALE, ALLOWNULL = A.ISNULLABLE FROM INTFSIMS..SYSCOLUMNS A LEFT JOIN INTFSIMS..SYSOBJECTS B ON A.ID = B.ID LEFT JOIN INTFSIMS..SYSTYPES C ON A.XUSERTYPE = C.XUSERTYPE WHERE B.XTYPE = 'U') B ON A.TABLENAME = B.TABLENAME AND A.FIELDNAME = B.FIELDNAME WHERE ISNULL(A.TABLENAME, '') = '' OR ISNULL(B.TABLENAME, '') = '' OR A.FIELDTYPE <> B.FIELDTYPE OR A.FIELDSNO <> B.FIELDSNO OR A.LENGTH <> B.LENGTH OR A.LENSEC <> B.LENSEC OR A.ALLOWNULL <> B.ALLOWNULL ORDER by 1, 4