sql server编写通用脚本自动检查两个不同服务器的新旧数据库的表结构差异

转自:https://www.cnblogs.com/zhang502219048/p/11028767.html

问题:
工作过程中,不管是什么项目,伴随着项目不断升级版本,对应的项目数据库业务版本也不断升级,数据库出现新增表、修改表、删除表、新增字段、修改字段、删除字段等变化,如果人工检查,数据库表和字段比较多的话,工作量就非常大。

解决方案:
这里博主为大家分享一个在工作过程中编写的自动检查数据库表结构版本差异的通用脚本,只需要把新旧数据库名称批量替换成实际的名称就可以,支持通过链接服务器跨服务器检查不同服务器的两个数据库表结构差异。

脚本:

 

/*
    使用说明:Old数据库为DB_V1,New数据库为[localhost].DB_V2。根据实际需要批量替换数据库名称
    脚本来源:https://www.cnblogs.com/zhang502219048/p/11028767.html
*/

-- sysobjects插入临时表
select s.name + '.' + t.name as TableName, t.* into #tempTA 
from DB_V1.sys.tables t
inner join DB_V1.sys.schemas s on s.schema_id = t.schema_id

select s.name + '.' + t.name as TableName, t.* into #tempTB 
from [localhost].DB_V2.sys.tables t
inner join [localhost].DB_V2.sys.schemas s on s.schema_id = t.schema_id

-- syscolumns插入临时表
select * into #tempCA from DB_V1.dbo.syscolumns 
select * into #tempCB from [localhost].DB_V2.dbo.syscolumns

-- 第一个数据库表和字段 
select b.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 
-- 第二个数据库表和字段 
select b.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 #tempA
    except
    select * from #tempB
) a;

--增加的字段
select * from    
( 
    select * from #tempB
    except
    select * from #tempA
) a;

--select * from #tempA
--select * from #tempB

drop table #tempTA, #tempTB, #tempCA, #tempCB, #tempA, #tempB

 

示例旧数据库DB_V1:

示例新数据库DB_V2:

脚本运行结果:

结论:
从上面几个图可以看到,表和字段的差异部分就被自动检测到了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQL Server中,可以通过以下几种方法查找两个数据库之间的差异: 1. 使用SQL查询语句: 可以编写SQL查询语句来比较两个之间的差异。首先需要确定比较的字段,然后编写一条SELECT语句用于比较两个之间的数据。例如,可以选择使用LEFT JOIN或FULL JOIN来比较两个中特定字段的值,然后根据结果判断差异。 2. 使用合并语句: SQL Server提供了MERGE语句,可以用于将两个合并成一个新,并显示差异。MERGE语句可以根据指定的条件将两个的数据合并,并将合并结果插入到一个新中。通过对比源和目标之间的数据,可以找出差异并进行处理。 3. 使用工具辅助比较: SQL Server Management Studio (SSMS)提供了一个名为SQL Data Compare的工具,可以帮助用户比较两个数据库差异。该工具根据指定的比较条件,找出两个之间的差异,并显示在一个结果集中。用户可以选择将差异的数据同步到目标中。 4. 使用第三方工具: 除了SQL Server本身提供的工具外,还有一些第三方工具也可以帮助查找两个数据库差异。例如,著名的比较工具Beyond Compare和Red Gate的SQL Compare都可以比较数据库之间的差异,并提供了更多高级功能,如生成比较报告、自动同步等。 无论使用哪种方法,找到并比较两个数据库差异是非常重要的,可以帮助我们及时发现数据不一致的问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值