比較兩個資料庫的表結構差異(轉)
比較兩個資料庫的表結構差異(轉)[@more@]/*--比較兩個資料庫的表結構差異--*//*--呼叫示例exec p_comparestructure 'xzkh_model','xzkh_new'--*/if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_comparestructure]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)drop procedure [dbo].[p_comparestructure]GOcreate proc p_comparestructure@dbname1 varchar(250), --要比較的資料庫名1@dbname2 varchar(250) --要比較的資料庫名2ascreate table #tb1(表名1 varchar(250),欄位名 varchar(250),序號 int,標識 bit,主鍵 bit,型別 varchar(250),佔用位元組數 int,長度 int,小數位數 int,允許空 bit,預設值 varchar(500),欄位說明 varchar(500))create table #tb2(表名2 varchar(250),欄位名 varchar(250),序號 int,標識 bit,主鍵 bit,型別 varchar(250),佔用位元組數 int,長度 int,小數位數 int,允許空 bit,預設值 varchar(500),欄位說明 varchar(500))--得到資料庫1的結構exec('insert into #tb1 SELECT表名=d.name,欄位名=a.name,序號=a.colid,標識=case when a.status=0x80 then 1 else 0 end,主鍵=case when exists(SELECT 1 FROM '+@dbname1+'..sysobjects where xtype=''PK'' and name in (SELECT name FROM '+@dbname1+'..sysindexes WHERE indid in(SELECT indid FROM '+@dbname1+'..sysindexkeys WHERE id = a.id AND colid=a.colid))) then 1 else 0 end,型別=b.name, 佔用位元組數=a.length,長度=a.prec,小數位數=a.scale, 允許空=a.isnullable,預設值=isnull(e.text,''''''),欄位說明=isnull(g.[value],'''''')FROM '+@dbname1+'..syscolumns aleft join '+@dbname1+'..systypes b on a.xtype=b.xusertypeinner join '+@dbname1+'..sysobjects d on a.id=d.id and d.xtype=''U'' and d.name<>''dtproperties''left join '+@dbname1+'..syscomments e on a.cdefault=e.idleft join '+@dbname1+'..sysproperties g on a.id=g.id and a.colid=g.smallidorder by a.id,a.colorder')--得到資料庫2的結構exec('insert into #tb2 SELECT表名=d.name,欄位名=a.name,序號=a.colid,標識=case when a.status=0x80 then 1 else 0 end,主鍵=case when exists(SELECT 1 FROM '+@dbname2+'..sysobjects where xtype=''PK'' and name in (SELECT name FROM '+@dbname2+'..sysindexes WHERE indid in(SELECT indid FROM '+@dbname2+'..sysindexkeys WHERE id = a.id AND colid=a.colid))) then 1 else 0 end,型別=b.name, 佔用位元組數=a.length,長度=a.prec,小數位數=a.scale, 允許空=a.isnullable,預設值=isnull(e.text,''''''),欄位說明=isnull(g.[value],'''''')FROM '+@dbname2+'..syscolumns aleft join '+@dbname2+'..systypes b on a.xtype=b.xusertypeinner join '+@dbname2+'..sysobjects d on a.id=d.id and d.xtype=''U'' and d.name<>''dtproperties''left join '+@dbname2+'..syscomments e on a.cdefault=e.idleft join '+@dbname2+'..sysproperties g on a.id=g.id and a.colid=g.smallidorder by a.id,a.colorder')--and not exists(select 1 from #tb2 where 表名2=a.表名1)select 比較結果=case when a.表名1 is null and b.序號=1 then '庫1缺少表:'+b.表名2when b.表名2 is null and a.序號=1 then '庫2缺少表:'+a.表名1when a.欄位名 is null and exists(select 1 from #tb1 where 表名1=b.表名2) then '庫1 ['+b.表名2+'] 缺少字 段:'+b.欄位名when b.欄位名 is null and exists(select 1 from #tb2 where 表名2=a.表名1) then '庫2 ['+a.表名1+'] 缺少欄位:'+a.欄位名when a.標識<>b.標識 then '標識不同'when a.主鍵<>b.主鍵 then '主鍵設定不同'when a.型別<>b.型別 then '欄位型別不同'when a.佔用位元組數<>b.佔用位元組數 then '佔用位元組數'when a.長度<>b.長度 then '長度不同'when a.小數位數<>b.小數位數 then '小數位數不同'when a.允許空<>b.允許空 then '是否允許空不同'when a.預設值<>b.預設值 then '預設值不同'when a.欄位說明<>b.欄位說明 then '欄位說明不同'else '' end,*from #tb1 afull join #tb2 b on a.表名1=b.表名2 and a.欄位名=b.欄位名where a.表名1 is null or a.欄位名 is null or b.表名2 is null or b.欄位名 is nullor a.標識<>b.標識 or a.主鍵<>b.主鍵 or a.型別<>b.型別or a.佔用位元組數<>b.佔用位元組數 or a.長度<>b.長度 or a.小數位數<>b.小數位數or a.允許空<>b.允許空 or a.預設值<>b.預設值 or a.欄位說明<>b.欄位說明order by isnull(a.表名1,b.表名2),isnull(a.序號,b.序號)--isnull(a.欄位名,b.欄位名)go
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8225414/viewspace-944382/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 比較兩個的表結構差異
- 比較兩個資料庫的差異資料庫
- java比較mysql兩個資料庫中差異JavaMySql資料庫
- 如何比較兩個資料庫表結構的不同資料庫
- 比較兩個表的資料差別
- SQL Server 比較兩個資料庫的檢視和儲存過程結構差異SQLServer資料庫儲存過程
- 比對兩個資料庫的差異:Java篇資料庫Java
- oracle資料庫兩表資料比較Oracle資料庫
- 線上json差異比較工具--遞迴比較兩個json的節點和值的差異,並支援差異數預覽和逐個檢視差異JSON遞迴
- Golang 針對 MySQL 資料庫表結構的差異 SQL 工具GolangMySql資料庫
- 在Linux中,如何比較兩個檔案差異?Linux
- 兩表中某列的資料差異
- 資料結構比較資料結構
- 結構化資料與非結構化資料的差異
- grep -vFf 比較2個檔案差異
- MySQL 對比資料庫表結構MySql資料庫
- 比較兩個mysql資料庫裡面的表是否相同的一個校驗指令碼MySql資料庫指令碼
- data (){..} 返回一個物件或者不返回物件,兩種寫法的差異比較物件
- Oracle dblink比較兩個庫中的表欄位Oracle
- 關係型資料庫表結構的兩個設計技巧資料庫
- 使用Python來比較資料夾並提取差異部分Python
- awk比較檔案內容的差異
- 用VBS比較兩個Excel檔案的資料Excel
- java 如何從零實現一個資料庫差異對比工具?Java資料庫
- 轉享:NoSQL 圖資料庫比較SQL資料庫
- postgresql 比較兩個時間差大於 N個小時SQL
- 如何定義一個自帶資料區的結構體:三種資料結構體的比較結構體資料結構
- 利用VC++獲取異構型資料庫庫結構資訊 (轉)C++資料庫
- C#比較兩個字串的相似度【轉】C#字串
- Linux下檔案差異比較工具Linux
- 圖資料庫比較資料庫
- 主流資料庫比較資料庫
- openGauss資料與PostgreSQL的差異對比SQL
- 【原創】比較資料泵和exp/imp對相同資料匯出/匯入的效能差異
- 常見資料庫系統比較之Oracle資料庫(轉)資料庫Oracle
- ECshop 每個資料庫表結構說明資料庫
- 比較兩個TABLE的資料是否完全一致
- Activiti資料庫表結構資料庫