【问题标题】:find out missing stored procedures in mssql找出mssql中丢失的存储过程
【发布时间】:2013-12-30 13:16:41
【问题描述】:

我有一个由许多开发人员参与的大型项目。我们有 git 用于代码的版本控制,但我们在表和存储过程的版本控制方面遇到了困难。每次我必须从主服务器备份并在本地服务器上恢复数据库,但仍然有 100 多个存储过程。我只需要将我的存储过程与他们以及他们与我的同步。

他们有什么方法可以找出他们的服务器但不是我的存储过程,反之亦然?

我的所有程序都以 sp_

开头

【问题讨论】:

    标签: sql sql-server stored-procedures


    【解决方案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_')
    

    【讨论】:

      【解决方案2】:

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

      1. 使用以下脚本从您的 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 
        
      2. 执行以下查询。此处将 [Server IP] 更改为正确的 IP,将 [Database] 更改为您的主服务器数据库名称。在本地服务器上执行此查询。

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

      【讨论】:

      • 这种方法的好处是可以避免每次需要获取最新的存储过程时进行备份和恢复。如果您有足够的服务器访问权限,这是一种实时 sp 比较方法。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-01
      • 2018-12-23
      相关资源
      最近更新 更多