我最近加入了一个大约有20-40个数据库的软件项目。
每个数据库至少有200个存储过程,其中一些还有更多,因此我手动搜索特定过程非常慢。
我知道我需要查看一个存储过程来修复整个项目中的错误某处,它被称为XYZ_procedure
如何在SQL Server Management Studio中的所有数据库中搜索此过程?
答案 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的免费红门工具,它会执行此操作 - 它会搜索您的整个数据库中的任何类型的字符串。
对于任何DBA或数据库开发人员来说,这是一个非常必备的工具 - 我是否已经提到它绝对免费用于任何用途?
答案 2 :(得分:0)
答案 3 :(得分:0)
我认为最简单的方法是使用未记录的存储过程sp_MSForeachdb
,它为每个数据库执行命令:
EXEC sp_MSforeachdb
'
USE ?
IF EXISTS (
SELECT 1
FROM sys.objects
WHERE name = ''XYZ_procedure''
)
SELECT DB_NAME();
'