比較兩個的表結構差異
/*--比較兩個資料庫的表結構差異
--*/
/*--呼叫示例
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
相關文章
- pandas比較兩個文件的差異
- Javers 比較兩個類的差異
- 線上json差異比較工具--遞迴比較兩個json的節點和值的差異,並支援差異數預覽和逐個檢視差異JSON遞迴
- 在Linux中,如何比較兩個檔案差異?Linux
- java比較mysql兩個資料庫中差異JavaMySql資料庫
- 如何比較兩個資料庫表結構的不同資料庫
- data (){..} 返回一個物件或者不返回物件,兩種寫法的差異比較物件
- 同一張表的兩個欄位比較查詢
- 使用Visual Studio進行檔案差異比較
- 集合差異比較演算法及效能測試演算法
- 比較兩個table是否相同
- JavaScript比較兩個時間JavaScript
- Golang 針對 MySQL 資料庫表結構的差異 SQL 工具GolangMySql資料庫
- 比較兩個陣列是否相等陣列
- list對比差異
- 結構化資料與非結構化資料的差異
- 2023版:深度比較幾種.NET Excel匯出庫的效能差異Excel
- 比較2018年的Angular和React 2018 - 沒有人告訴你的差異AngularReact
- MappedByteBuffer VS FileChannel:從核心層面對比兩者的效能差異APP
- matlab比較兩個矩陣是否相等Matlab矩陣
- python如何比較兩個字串是否相等Python字串
- C#比較兩個字串的相似度【轉】C#字串
- SAP Spartacus B2B OrgUnit 和 OrgUser 的路由對映差異比較路由
- 儲存結構的種類與比較
- Java Optional的orElse()與orElseGet()兩個方法比較 - BaeldungJava
- 比較兩個陣列中是否有相同的元素陣列
- C++ - 比較兩個浮點數大小C++
- Python內建庫實現文字比較並返回差異位置座標Python
- 表結構對比版本
- IDEA如何對比不同分支某個檔案的差異Idea
- 文字內容差異對比
- 比較兩個檔案,求出不同的內容,A-B
- SAP BSP應用有狀態和無狀態行為差異比較
- 兩集合比較判斷
- Gradle中的差異化構建Gradle
- 寫程式碼被大語言模型坑之使用LocalDateTime比較兩個時間差了幾天模型LDA
- 如何定義一個自帶資料區的結構體:三種資料結構體的比較結構體資料結構
- [20220610]對比表結構的不同.txt
- 【Python】Python 對比 C語言的差異PythonC語言