顶级干货

 

用来比较两个数据库之间 表结构,存储过程及视图差异的存储过程,直接复制对应的存储过程,无需改动,直接在数据库中执行(传递要比较的数据库参数)即可

1.两个数据库之间存储过程及视图差异比较的存储过程

--测试脚本
--exec [p_compSPAndView] 'FAMS_PrePROD','FAMS_SIT'  
 
 
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO



CREATE?proc
 [dbo].[p_compSPAndView] 

@db1
 sysname, --第一个库


@db2
 sysname --第二个库


as

exec('


select
 类型=case isnull(a.xtype,b.xtype) when ''V''
 then N''视图''
 else N''存储过程''
 end 

,匹配情况=case


when
 a.name is null then N''库
 ['+@db1+']
 中无''


when
 b.name is null then N''库
 ['+@db2+']
 中无''


else
 N''结构不同''
 end 

,对象名称=isnull(a.name,b.name),a.text
 as atext, b.text as btext

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
View Code

相关文章: