查找mssql中缺少的存储过程

查找mssql中缺少的存储过程,sql,sql-server,stored-procedures,Sql,Sql Server,Stored Procedures,我有一个大项目,是由许多开发人员工作。我们有用于代码版本控制的git,但是对于表和存储过程的版本控制我们有困难。每次我都要从主服务器进行备份并在本地服务器上恢复数据库,但仍然有100多个存储过程。我只需要将我的存储过程与它们同步,并将它们与我的同步 他们是否有办法找到存储过程,该存储过程是他们的服务器,但不是我的,反之亦然 我所有的程序都是从sp开始的,最好的方法如下 从您的服务器上恢复 将其还原到本地数据库所在的本地服务器 假设db1是您刚才恢复的数据库,db2是您在本地服务器中已经拥有的数

我有一个大项目,是由许多开发人员工作。我们有用于代码版本控制的git,但是对于表和存储过程的版本控制我们有困难。每次我都要从主服务器进行备份并在本地服务器上恢复数据库,但仍然有100多个存储过程。我只需要将我的存储过程与它们同步,并将它们与我的同步

他们是否有办法找到存储过程,该存储过程是他们的服务器,但不是我的,反之亦然


我所有的程序都是从sp开始的,最好的方法如下

  • 从您的服务器上恢复

  • 将其还原到本地数据库所在的本地服务器

  • 假设db1是您刚才恢复的数据库,db2是您在本地服务器中已经拥有的数据库

    如果需要找出db1中的存储过程,而不是db2中的存储过程,那么启动下面的sql


嗨,你必须分两步来做

  • 使用下面的脚本从sql实例创建到服务器的链接 注意:要使用SQL Server IP更改[Server IP],还需要使用有效的SQL凭据更改[User ID]和[Password]

    /* Object:  LinkedServer [Server IP]    Script Date: 12/12/2013 12:29:41 */
    EXEC master.dbo.sp_addlinkedserver
      @server = N'[Server IP]',
      @srvproduct=N'SQL Server'
    
    /* For security reasons the linked server remote logins password is changed with ## */
    EXEC master.dbo.sp_addlinkedsrvlogin
      @rmtsrvname=N'[Server IP]',
      @useself=N'False',
      @locallogin=NULL,
      @rmtuser=N'[User Id]',
      @rmtpassword='[Password]'
    
    GO
    
    EXEC master.dbo.sp_serveroption
      @server=N'[Server IP]',
      @optname=N'collation compatible',
      @optvalue=N'false'
    
    GO
    
    EXEC master.dbo.sp_serveroption
      @server=N'[Server IP]',
      @optname=N'data access',
      @optvalue=N'true'
    
    GO
    
    EXEC master.dbo.sp_serveroption
      @server=N'[Server IP]',
      @optname=N'dist',
      @optvalue=N'false'
    
    GO
    
    EXEC master.dbo.sp_serveroption
      @server=N'[Server IP]',
      @optname=N'pub',
      @optvalue=N'false'
    
    GO
    
    EXEC master.dbo.sp_serveroption
      @server=N'[Server IP]',
      @optname=N'rpc',
      @optvalue=N'false'
    
    GO
    
    EXEC master.dbo.sp_serveroption
      @server=N'[Server IP]',
      @optname=N'rpc out',
      @optvalue=N'false'
    
    GO
    
    EXEC master.dbo.sp_serveroption
      @server=N'[Server IP]',
      @optname=N'sub',
      @optvalue=N'false'
    
    GO
    
    EXEC master.dbo.sp_serveroption
      @server=N'[Server IP]',
      @optname=N'connect timeout',
      @optvalue=N'0'
    
    GO
    
    EXEC master.dbo.sp_serveroption
      @server=N'[Server IP]',
      @optname=N'collation name',
      @optvalue=NULL
    
    GO
    
    EXEC master.dbo.sp_serveroption
      @server=N'[Server IP]',
      @optname=N'lazy schema validation',
      @optvalue=N'false'
    
    GO
    
    EXEC master.dbo.sp_serveroption
      @server=N'[Server IP]',
      @optname=N'query timeout',
      @optvalue=N'0'
    
    GO
    
    EXEC master.dbo.sp_serveroption
      @server=N'[Server IP]',
      @optname=N'use remote collation',
      @optvalue=N'true'
    
    GO
    
    EXEC master.dbo.sp_serveroption
      @server=N'[Server IP]',
      @optname=N'remote proc transaction promotion',
      @optvalue=N'true'
    
    GO 
    
  • 执行以下查询。此处更改[Server IP]以更正IP,并将[Database]更改为主服务器数据库名称。在本地服务器上执行此查询

        SELECT *
        FROM   [Server IP].[Database].sys.objects
        WHERE  type = 'p'
               AND name NOT IN (SELECT name
                                FROM   sys.objects)
    

  • 这种方法的优点是,每次需要获取最新的存储过程时,都可以避免备份和恢复。这是一种实时sp比较方法,前提是您有足够的服务器访问权限。
        SELECT *
        FROM   [Server IP].[Database].sys.objects
        WHERE  type = 'p'
               AND name NOT IN (SELECT name
                                FROM   sys.objects)