比較兩個的表結構差異
/*--比較兩個資料庫的表結構差異
--*/
/*--呼叫示例
execp_comparestructure'xzkh_model','xzkh_new'
--*/
ifexists(select*fromdbo.sysobjectswhereid=object_id(N'[dbo].[p_comparestructure]')andOBJECTPROPERTY(id,N'IsProcedure')=1)
dropprocedure[dbo].[p_comparestructure]
GO
createprocp_comparestructure
@dbname1varchar(250), --要比較的資料庫名1
@dbname2varchar(250) --要比較的資料庫名2
as
createtable#tb1(表名1varchar(250),欄位名varchar(250),序號int,標識bit,主鍵bit,型別varchar(250),
佔用位元組數int,長度int,小數位數int,允許空bit,預設值varchar(500),欄位說明varchar(500))
createtable#tb2(表名2varchar(250),欄位名varchar(250),序號int,標識bit,主鍵bit,型別varchar(250),
佔用位元組數int,長度int,小數位數int,允許空bit,預設值varchar(500),欄位說明varchar(500))
--得到資料庫1的結構
exec('insertinto#tb1SELECT
表名=d.name,欄位名=a.name,序號=a.colid,
標識=casewhena.status=0x80then1else0end,
主鍵=casewhenexists(SELECT1FROM'+@dbname1+'..sysobjectswherextype=''PK''andnamein(
SELECTnameFROM'+@dbname1+'..sysindexesWHEREindidin(
SELECTindidFROM'+@dbname1+'..sysindexkeysWHEREid=a.idANDcolid=a.colid
)))then1else0end,
型別=b.name, 佔用位元組數=a.length,長度=a.prec,小數位數=a.scale, 允許空=a.isnullable,
預設值=isnull(e.text,''''''),欄位說明=isnull(g.[value],'''''')
FROM'+@dbname1+'..syscolumnsa
leftjoin'+@dbname1+'..systypesbona.xtype=b.xusertype
innerjoin'+@dbname1+'..sysobjectsdona.id=d.id andd.xtype=''U''and d.name<>''dtproperties''
leftjoin'+@dbname1+'..syscommentseona.cdefault=e.id
leftjoin'+@dbname1+'..syspropertiesgona.id=g.idanda.colid=g.smallid
orderbya.id,a.colorder')
--得到資料庫2的結構
exec('insertinto#tb2SELECT
表名=d.name,欄位名=a.name,序號=a.colid,
標識=casewhena.status=0x80then1else0end,
主鍵=casewhenexists(SELECT1FROM'+@dbname2+'..sysobjectswherextype=''PK''andnamein(
SELECTnameFROM'+@dbname2+'..sysindexesWHEREindidin(
SELECTindidFROM'+@dbname2+'..sysindexkeysWHEREid=a.idANDcolid=a.colid
)))then1else0end,
型別=b.name, 佔用位元組數=a.length,長度=a.prec,小數位數=a.scale, 允許空=a.isnullable,
預設值=isnull(e.text,''''''),欄位說明=isnull(g.[value],'''''')
FROM'+@dbname2+'..syscolumnsa
leftjoin'+@dbname2+'..systypesbona.xtype=b.xusertype
innerjoin'+@dbname2+'..sysobjectsdona.id=d.id andd.xtype=''U''and d.name<>''dtproperties''
leftjoin'+@dbname2+'..syscommentseona.cdefault=e.id
leftjoin'+@dbname2+'..syspropertiesgona.id=g.idanda.colid=g.smallid
orderbya.id,a.colorder')
--andnotexists(select1from#tb2where表名2=a.表名1)
select比較結果=casewhena.表名1isnullandb.序號=1then'庫1缺少表:'+b.表名2
whenb.表名2isnullanda.序號=1then'庫2缺少表:'+a.表名11
相關文章
- 比較兩個資料庫的表結構差異(轉)資料庫
- 比較兩個資料庫的差異資料庫
- 比較兩個表的資料差別
- java比較mysql兩個資料庫中差異JavaMySql資料庫
- SQL Server 比較兩個資料庫的檢視和儲存過程結構差異SQLServer資料庫儲存過程
- 線上json差異比較工具--遞迴比較兩個json的節點和值的差異,並支援差異數預覽和逐個檢視差異JSON遞迴
- 如何比較兩個資料庫表結構的不同資料庫
- 在Linux中,如何比較兩個檔案差異?Linux
- grep -vFf 比較2個檔案差異
- data (){..} 返回一個物件或者不返回物件,兩種寫法的差異比較物件
- 比對兩個資料庫的差異:Java篇資料庫Java
- awk比較檔案內容的差異
- postgresql 比較兩個時間差大於 N個小時SQL
- Linux下檔案差異比較工具Linux
- 兩表中某列的資料差異
- 同一張表的兩個欄位比較查詢
- Oracle dblink比較兩個庫中的表欄位Oracle
- Java 兩個日期比較Java
- PostgreSQL如何比較兩個表的定義是否一致SQL
- 集合差異比較演算法及效能測試演算法
- JavaScript比較兩個時間JavaScript
- 比較兩個table是否相同
- Golang 針對 MySQL 資料庫表結構的差異 SQL 工具GolangMySql資料庫
- 資料結構比較資料結構
- 使用Visual Studio進行檔案差異比較
- 比較兩個陣列是否相等陣列
- JavaScript比較兩個時間大小JavaScript
- shell比較兩個字串是否相等字串
- mysql比較兩個日期間隔MySql
- javascript比較兩個時間日期的大小JavaScript
- 使用Python來比較資料夾並提取差異部分Python
- 結構化資料與非結構化資料的差異
- oracle資料庫兩表資料比較Oracle資料庫
- 比較輸入兩個版本號大小
- C#比較兩個字串的相似度【轉】C#字串
- SAP Spartacus B2B OrgUnit 和 OrgUser 的路由對映差異比較路由
- 儲存結構的種類與比較
- 比較兩個mysql資料庫裡面的表是否相同的一個校驗指令碼MySql資料庫指令碼