SQL SERVER 對2個資料庫的表結構進行比較

2021-10-25 08:22:45 字數 3140 閱讀 7815

對於連線到的2個資料庫,進行表結構的對比,首先需要連線到另一資料庫

exec sp_addlinkedserver 'tsql_test'

,'sql'

,'sqloledb'

,'127.0.0.1'

--ip根據實際來

exec sp_addlinkedsrvlogin 'tsql_test'

,'false'

,null

,'sa'

,'123456'

--sa為登入使用者名稱,自行替換,123456為登入密碼,自行替換

go

在結束後記得釋放遠端連線

exec sp_dropserver 'tsql_test'

,'droplogins'

查詢資料庫有差異的表

--otherdatabase為另一資料庫名,根據實際自行替換

select ntable = a.name, otable = b.name

from sysobjects a

left

join tsql_test.otherdatabase.dbo.sysobjects b

on a.name = b.name

where isnull(b.name,'')

=''and a.xtype =

'u'union

allselect ntable = b.name, otable = a.name

from tsql_test.otherdatabase.dbo.sysobjects a

left

join sysobjects b

on a.name = b.name

where isnull(b.name,'')

=''and a.xtype =

'u'orderby1

,2

比較兩個資料庫中每個表字段的差異

--otherdatabase為另一資料庫名,根據實際自行替換

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)

endfrom

(select

tablename = b.name,

fieldname = a.name,

fieldsno = a.colid,

fieldtype = c.name,

length = a.length,

lensec = a.xscale,

allownull = a.isnullable

from syscolumns a

left

join sysobjects b

on a.id = b.id

left

join 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 tsql_test.otherdatabase.dbo.syscolumns a

left

join tsql_test.otherdatabase.dbo.sysobjects b

on a.id = b.id

left

join tsql_test.otherdatabase.dbo.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

orderby1

,4

比較2個資料庫的差異

對已經執行的系統進行大規模模組開發之後,對資料庫和程式修改比較大。如果開始開發的時候沒有嚴格要求,或者人員沒有按照要求做,或者人員離職交接不合格,很容易造成文件不完整,必須比較兩個資料庫的差別。下面的sql比較出兩個資料庫中表結構有差的地方。select obj.name as tablename,...

SQLserver2資料庫操作

收縮資料庫和資料檔案 使用dbcc shrinkdatabase 收縮資料庫 收縮webshop資料庫,剩餘可用空間10 dbcc shrinkdatabase webshop,10 使用dbcc shrinkfile收縮資料檔案 將資料庫webshop中名為datafile1的資料檔案收縮到10m...

對整個資料庫進行查詢

最近工作中遇到乙個需求,要對整個資料庫中每個表的每個字段進行條件查詢。最後寫了一段 實現遍歷資料庫的所有表並對每個字段進行條件查詢。下面的 檢查欄位的值是否包含 http 是則記錄 表名欄位名 環境 sql server 2008 use database database為目標資料庫名稱 decl...