Sql Server 查询 两个数据库有哪些不同之处(针对于表,存储过程,视图等等)

在有些时候, 需要知道测试站和正式站的数据库有那些不同, 如果单纯用肉眼去检查,那几乎是不可能完成的事情。这个时候我们就需要借助一些系统内置的表来进行关联查询了。

--第一个库 
DECLARE @db1 sysname = 'Construction_Demo';

--第二个库 
DECLARE @db2 sysname = 'Construction_Test';

DECLARE @sqlStr VARCHAR(MAX) = '';


SET @sqlStr = 'SELECT  类型 = CASE ISNULL(a.xtype, b.xtype)
					   WHEN ''V'' THEN ''视图''
					   ELSE ''存储过程''
					 END ,
				匹配情况 = CASE WHEN a.name IS NULL THEN ''库 [' + @db1 + '] 中无''
							WHEN b.name IS NULL THEN ''库 [' + @db2 + '] 中无''
							ELSE ''结构不同''
					   END ,
				对象名称 = ISNULL(a.name, b.name) ,
				a.text AS atext ,
				b.text AS btext
		FROM    ( SELECT    a.name ,
							a.xtype ,
							(
							SELECT  b.text + ''''
							FROM    ' + @db1 + '..syscomments b
							WHERE   a.id = b.id
							ORDER BY b.colid
				  FOR       XML PATH('''') ,
								TYPE).value(''.'', ''NVARCHAR(MAX)'') AS text
				  FROM      ' + @db1 + '..sysobjects a
				  WHERE     a.xtype IN ( ''V'', ''P'' )
							AND a.status >= 0
				) a
				FULL JOIN ( SELECT  a.name ,
									a.xtype ,
									(
									SELECT  b.text + ''''
									FROM    ' + @db2 + '..syscomments b
									WHERE   a.id = b.id
									ORDER BY b.colid
							FOR     XML PATH('''') ,
										TYPE).value(''.'', ''NVARCHAR(MAX)'') AS text
							FROM    ' + @db2 + '..sysobjects a
							WHERE   a.xtype IN ( ''V'', ''P'' )
									AND a.status >= 0
						  ) b ON a.name = b.name
								 AND a.xtype = b.xtype
		WHERE   a.name IS NULL
				OR b.name IS NULL
				OR ISNULL(a.text, '''') <> ISNULL(b.text, '''')';

EXEC(@sqlStr);

执行结果:

Sql Server 查询 两个数据库有哪些不同之处(针对于表,存储过程,视图等等)

这样就完美解决了手动检查的痛点!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胖太乙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值