【问题标题】:SQL Server Management Studio - find stored procedure by name over multiple databasesSQL Server Management Studio - 在多个数据库中按名称查找存储过程
【发布时间】:2017-10-24 06:16:41
【问题描述】:

我最近加入了一个拥有大约 20-40 个数据库的软件项目。

每个数据库至少有 200 个存储过程,其中一些存储过程更多,因此手动搜索特定过程对我来说非常慢。

我知道在整个项目中某处有一个我需要查看的存储过程来修复一个错误,它被称为XYZ_procedure

如何在 SQL Server Management Studio 中的所有数据库中搜索此过程?

【问题讨论】:

    标签: sql sql-server stored-procedures ssms


    【解决方案1】:

    您可以使用动态 SQL 在 SQL Server Management Studio 中检查所有数据库的过程

    USE MASTER
    GO
    BEGIN TRAN
    
    DECLARE @strt INT,@End INT,@Database NVARCHAR(50)
    
    SELECT * INTO #T FROM Sys.databases WITH(NOLOCK) WHERE database_id>4 
    ORDER BY 1
    
    SELECT ROW_NUMBER ()OVER (ORDER BY database_Id)Db_Id,* INTO #TT FROM #T
    SET @strt=1
    SELECT @End=Max(Db_ID)FROM #tt
    
    WHILE @strt<=@END
         BEGIN
             DECLARE @string NVARCHAR(MAX)
             SELECT @Database=NAME FROM #TT WHERE Db_ID=@strt
    
            Set @string='  Select '''+@Database+'''db_Name,* from '+@Database+'.sys.objects 
              WHERE Name=''XYZ_procedure'''
    
              SET @strt=@strt+1
              PRINT @string
              EXEC(@string)
         END
    
    ROLLBACK TRAN
    

    【讨论】:

      【解决方案2】:

      如果您需要按名称查找数据库对象(例如表、列、触发器) - 请查看名为 SQL SearchFREE Red-Gate 工具,它会搜索您的整个任何类型字符串的数据库。

      对于任何 DBA 或数据库开发人员来说,它都是必备工具 - 我是否已经提到它绝对免费可用于任何用途??

      【讨论】:

        【解决方案3】:

        如果我做对了。您需要一种在 SSMS 中按名称过滤过程的方法。您可以参考以下链接:

        Find Using Filter Settings In Object Explorer

        【讨论】:

          【解决方案4】:

          我认为最简单的方法是使用未记录的存储过程sp_MSForeachdb,它为每个数据库执行一个命令:

          EXEC sp_MSforeachdb 
          '
          USE ?
          IF EXISTS (
              SELECT 1 
              FROM sys.objects
              WHERE name = ''XYZ_procedure''
              )
              SELECT DB_NAME();
          '
          

          【讨论】:

            猜你喜欢
            • 2011-12-19
            • 2015-08-20
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多