这个比较就麻烦了如果有主键,可以根据主键对应比较,例如: if exists(select * from 新数据 a full join 旧数据 b on a.主键=b.主键 where a.字段1 is null or b.字段1 is null or a.字段2 is null or b.字段2 is null .... or a.字段n is null or b.字段n is null) print '数据有变化' else print '数据相同'
--如果单单是比较结构,可以试试这个/*--数据结构比较 比较两个数据库中的视图/存储过程的结构(结构比较,不是功能比较)--邹建 2004.07--*//*--调用示例 --调用 exec p_compdb 'pubs','northwind' --*/ create proc p_compdb @db1 sysname, --第一个库 @db2 sysname --第二个库 as exec(' 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) from( select a.name,a.xtype,b.colid,b.text from ['+@db1+']..sysobjects a,['+@db1+']..syscomments b where a.id=b.id and a.xtype in(''V'',''P'') and a.status>=0 )a full join( select a.name,a.xtype,b.colid,b.text from ['+@db2+']..sysobjects a,['+@db2+']..syscomments b where a.id=b.id and a.xtype in(''V'',''P'') and a.status>=0 )b on a.name=b.name and a.xtype=b.xtype and a.colid=b.colid where a.name is null or b.name is null or isnull(a.text,'''')<>isnull(b.text,'''') group by a.name,b.name,a.xtype,b.xtype order by 类型,匹配情况,对象名称') go
我得好好研究研究,细节能不能实现 比如说视图某两个表连接方式由INNER JOIN 变成 left join 能不能把这种变化也体现出来
if exists(select * from 新数据 a full join 旧数据 b on a.主键=b.主键
where a.字段1 is null or b.字段1 is null
or a.字段2 is null or b.字段2 is null
....
or a.字段n is null or b.字段n is null)
print '数据有变化'
else
print '数据相同'
exec p_compdb 'pubs','northwind'
--*/
create proc p_compdb
@db1 sysname, --第一个库
@db2 sysname --第二个库
as
exec('
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)
from(
select a.name,a.xtype,b.colid,b.text
from ['+@db1+']..sysobjects a,['+@db1+']..syscomments b
where a.id=b.id and a.xtype in(''V'',''P'') and a.status>=0
)a full join(
select a.name,a.xtype,b.colid,b.text
from ['+@db2+']..sysobjects a,['+@db2+']..syscomments b
where a.id=b.id and a.xtype in(''V'',''P'') and a.status>=0
)b on a.name=b.name and a.xtype=b.xtype and a.colid=b.colid
where a.name is null
or b.name is null
or isnull(a.text,'''')<>isnull(b.text,'''')
group by a.name,b.name,a.xtype,b.xtype
order by 类型,匹配情况,对象名称')
go
比如说视图某两个表连接方式由INNER JOIN 变成 left join
能不能把这种变化也体现出来
但要注意一点,只能简单地比较结构,无法分析功能是否相同我不知道你说的结构怎么理解 功能怎么理解结构清楚了 难道功能就不能一样了么我想实现VIEW的连接关系变化也能看出来 能实现么