找出mssql中缺少的存储过程

时间:2013-12-12 08:16:03

标签: sql sql-server stored-procedures

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

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

我的所有程序都以 sp _

开头

2 个答案:

答案 0 :(得分:1)

最好的方法如下

  • 从您的服务器上备份

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

  • 说db1是你刚刚恢复的数据库,db2是你在本地服务器上已有的数据库

    如果你需要找出db1中但不在db2中的存储过程,那么触发下面的sql

SELECT SPECIFIC_NAME
FROM db1.information_schema.routines
WHERE routine_type = 'PROCEDURE'
  AND Left(ROUTINE_NAME, 3) IN ('sp_',
                                'xp_',
                                'ms_') EXCEPT
  SELECT SPECIFIC_NAME
  FROM db2.information_schema.routines WHERE routine_type = 'PROCEDURE'
  AND Left(ROUTINE_NAME, 3) IN ('sp_',
                                'xp_',
                                'ms_')

答案 1 :(得分:0)

您好,您必须分两步完成此操作

  1. 使用下面的脚本从sql实例创建指向服务器的链接 注意使用SQL Server IP更改[服务器IP] [用户ID]和[密码]和有效的SQL凭据。

    /* 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 
    
  2. 执行以下查询。这里更改[服务器IP]以更正IP和[数据库]到主服务器数据库名称。在本地服务器上执行此查询。

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