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

问题描述 投票:0回答:5

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

每个数据库至少有200个存储过程,有些甚至更多,所以我手动搜索特定过程非常慢。

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

XYZ_procedure

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

sql sql-server stored-procedures ssms
5个回答
1
投票

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

enter image description here

enter image description here

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


1
投票

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

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

0
投票

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

在对象资源管理器中查找使用过滤器设置


0
投票

我认为最简单的方法是使用未记录的存储过程

sp_MSForeachdb
,它为每个数据库执行一个命令:

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

0
投票

我发现了类似问题的查询。答案建议使用以下 SQL 查询,

SELECT [name] AS DatabaseName
FROM sys.databases
WHERE OBJECT_ID(QUOTENAME(name) + '.dbo.ProcedureNameHere', 'P') IS NOT NULL

您可以在此链接找到原始答案和更多详细信息

© www.soinside.com 2019 - 2024. All rights reserved.