SQL Server Management Studio - 在多个数据库上按名称查找存储过程

时间:2017-10-24 06:16:41

标签: sql sql-server stored-procedures ssms

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

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

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

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

4 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

如果您需要按名称查找数据库对象(例如表格,列,触发器) - 请查看名为SQL Search免费红门工具,它会执行此操作 - 它会搜索您的整个数据库中的任何类型的字符串。

enter image description here

enter image description here

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

答案 2 :(得分:0)

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

Find Using Filter Settings In Object Explorer

答案 3 :(得分:0)

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

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