数据库运维:检查不同数据库中表的差异方案
生活随笔
收集整理的這篇文章主要介紹了
数据库运维:检查不同数据库中表的差异方案
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
? ? ? ? ?
1、問題場景
程序員工作過程中,不管是什么項目,伴隨著項目不斷升級迭代,相應的項目數據庫業務版本也不斷更新,數據庫出現新增表、修改表、刪除表、新增字段、修改字段、刪除字段等數據版本的變化,如果人工檢查,數據庫表和字段比較多的話,工作量就非常大。
2、解決方案
這里為大家分享一個在工作過程中編寫的自動的對比數據庫表結構版本差異的通用腳本,只需要把新舊數據庫名稱批量替換成實際的名稱就可以,支持通過鏈接服務器跨服務器檢查不同服務器的兩個數據庫表結構差異。
具體腳本:
使用說明:Old數據庫為SQL_Road1,New數據庫為[localhost].SQL_Road2。根據實際需要批量替換數據庫名稱,其中[localhost]也可以改成遠程數據庫IP地址。
sys.objects插入臨時表
SELECTs.name + '.'?+ t.name AS?TableName,t.* INTO?#tempTA FROMSQL_Road1.sys.tables t INNER?JOIN?SQL_Road1.sys.schemas s ON?s.schema_id = t.schema_idSELECTs.name + '.'?+ t.name AS?TableName,t.* INTO?#tempTB FROM[localhost].SQL_Road2.sys.tables t INNER?JOIN?[localhost].SQL_Road2.sys.schemas s ON?s.schema_id = t.schema_idsys.columns插入臨時表
SELECT* INTO?#tempCA FROMSQL_Road1.dbo.syscolumns?SELECT* INTO?#tempCB FROM[localhost].SQL_Road2.dbo.syscolumns第一個數據庫表和字段?
SELECTb.TableName AS?表名,a.name AS?字段名,a.length AS?長度,c.name AS?類型 INTO?#tempA FROM#tempCA a INNER?JOIN?#tempTA b ON?b.object_id = a.id INNER?JOIN?systypes c ON?c.xusertype = a.xusertype ORDER?BY??b.name第二個數據庫表和字段?
SELECTb.TableName AS?表名,a.name AS?字段名,a.length AS?長度,c.name AS?類型 INTO?#tempB FROM#tempCB a INNER?JOIN?#tempTB b ON?b.object_id = a.id INNER?JOIN?systypes c ON?c.xusertype = a.xusertype ORDER?BY??b.name刪掉的字段
SELECT??* FROM (SELECT??* FROM??#tempAEXCEPTSELECT??* FROM??#tempB ) a;增加的字段
SELECT??* FROM (SELECT??* FROM??#tempBEXCEPTSELECT??* FROM??#tempA ) a;這樣我們就將兩個數據庫中表結構的差異比對出來了,當然這一般在數據同步過程中可能才會用到。
文章推薦程序員效率:畫流程圖常用的工具程序員效率:整理常用的在線筆記軟件遠程辦公:常用的遠程協助軟件,你都知道嗎?51單片機程序下載、ISP及串口基礎知識硬件:斷路器、接觸器、繼電器基礎知識
總結
以上是生活随笔為你收集整理的数据库运维:检查不同数据库中表的差异方案的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Bing翻译和Google翻译的比较
- 下一篇: 百度网盘——下载限速问题解决方案(油猴(