• 比较两个数据库的存储过程定义是否一致V1.0




    本脚本适用于Microsoft SQL Server 2005和Microsoft SQL Server 2008环境。

    Use master
    Go
    if object_ID('[sp_compareobjectdefinition]'is not null
        
    Drop Procedure [sp_compareobjectdefinition]
    Go
    /*
        比较两个数据库的存储过程定义是否一致V1.0 OK_008 2009-5-26
    */
    Create Procedure sp_CompareObjectDefinition
    (
        
    @DB1 nvarchar(512),
        
    @DB2 nvarchar(512),
        
    @Type char(2)='P',
        
    @ObjectName  nvarchar(512)=null
    )
    As
        
    /*
        参数说明
        
        @DB1            数据库名
        @DB2            数据库名
        @Type            对象类型,参照sys.objects中的type列描述
        @ObjectName        对象名称
     
        
    */
        
    Set Nocount On
     
        
    If @DB1=@DB2
        
    Begin
            
    Raiserror 50001 N'@DB1,@DB2设置不能相同。'
            
    Return(1)
        
    End
     
        
    If db_id(@DB1Is Null
        
    Begin
            
    Raiserror 50001 N'无效的数据库名,@DB1设置错误。'
            
    Return(1)
        
    End
     
        
    If db_id(@DB2Is Null
        
    Begin
            
    Raiserror 50001 N'无效的数据库名,@DB2设置错误。'
            
    Return(1)
        
    End
        
        
    Set @Type=Isnull(@Type,' P')
        
        
    Declare @sql nvarchar(4000),
                
    @sql1 nvarchar(1000),
                
    @where nvarchar(1000)
     
        
    If object_id('tempdb..#ObjectDefinition'Is Not Null
            
    Drop Table #ObjectDefinition
        
        
    Create Table #ObjectDefinition
        (
            dbname sysname,
            name sysname,
            type 
    char(2),
            definition 
    nvarchar(max)
        )
        
        
    Set @where=''
        
    If @Type >''        
            
    Set @where=' And a.Type='''+@Type+''''
     
        
    If @ObjectName >''    
            
    Set @where=@where+' And a.name='''+@ObjectName+''''
     
        
        
    Set @sql=N'
        a.name,a.type,b.definition
            From sys.objects As a
                Inner Join sys.sql_modules As b On b.object_id=a.object_id
            Where a.is_ms_shipped=0  
    '+@where+' And
                    Not Exists(Select 1 From sys.extended_properties Where major_id=a.object_id And minor_id=0 And class=1 And name = N
    ''microsoft_database_tools_support'')'
        
    Set @sql1='Use '+Quotename(@DB1)+'; Select dbname='''+@DB1+''','
     
        
    Insert Into #ObjectDefinition Exec(@sql1+@sql)
        
        
    Set @sql1='Use '+Quotename(@DB2)+'; Select dbname='''+@DB2+''','
        
    Insert Into #ObjectDefinition Exec(@sql1+@sql)
     
        
    Exec(N'
        ;With t As
        (
            Select name,Type From (Select name,Type,Definition From #ObjectDefinition Where dbname=
    '''+@DB1+'''    Except Select name,Type,Definition From #ObjectDefinition Where dbname='''+@DB2+''') As a
            Union All
            Select name,Type From (Select name,Type,Definition From #ObjectDefinition Where dbname=
    '''+@DB2+'''    Except Select name,Type,Definition From #ObjectDefinition Where dbname='''+@DB1+''') As b
        )
        Select Distinct a.Name As ObjectName,a.Type,
                Case When b.Name Is Not Null Then 1 Else 0 End As [
    '+@DB1+'],
                Case When c.Name Is Not Null Then 1 Else 0 End As [
    '+@DB2+']
            From t As a
                Left Outer Join #ObjectDefinition As b On b.name=a.name And b.DBName=
    '''+@DB1+'''
                Left Outer Join #ObjectDefinition As c On c.name=a.name And c.DBName=
    '''+@DB2+'''

            Order By a.Type,a.Name
        
    ')

        
    Drop Table #ObjectDefinition
     
    Go
  • 相关阅读:
    prometheus对硬盘的监控指标
    zabbix高级用法-Zabbix Tags获取到对应的触发器的核心代码段
    Confluence rest api接口
    zabbix官方模板库
    路由追踪程序Traceroute分析与科普
    C语言进制之间转换
    ubuntu挂载目录在windows10下权限问题
    C语言之原码、反码和补码
    centos下软件的安装与卸载
    PHP设计模式
  • 原文地址:https://www.cnblogs.com/wghao/p/1490442.html
Copyright © 2020-2023  润新知