我需要SQL Server中的查询或代码来获取服务器中正在使用该表的所有存储过程(需要该服务器上所有数据库中的所有存储过程)。
@run-at: document-start
上面的查询将在当前数据库中给出,但我需要查询从该服务器中的所有数据库获取。
感谢。桑迪普
答案 0 :(得分:1)
试试这个:
select * from sysobjects where id in
(select id from syscomments where text like '%myquery%')
order by [name]
其中“myquery”是表的名称。您需要在服务器上的每个数据库上单独运行它。
答案 1 :(得分:1)
EXECUTE master.sys.sp_MSforeachdb
"USE [?]; SELECT * FROM sys.procedures WHERE OBJECT_DEFINITION(OBJECT_ID) LIKE '%[dbo].[Batch]%'"
只考虑引用Batch对象的代码的排列(dbo.batch,[dbo]。[batch],dbo。[batch]等)
答案 2 :(得分:0)
感谢您的帮助。我得到以下查询将给出所有依赖于服务器中所有数据库的表或视图的存储过程。
DECLARE @SQL NVARCHAR(max)
SELECT @SQL = STUFF((SELECT ' UNION ALL SELECT ' + quotename(NAME, '''') + ' AS Db_Name, Routine_Name collate SQL_Latin1_General_CP1_CI_AS as SP_Name FROM ' + quotename(NAME) + '.INFORMATION_SCHEMA.Routines WHERE ROUTINE_Definition like ''%Replace_Table_Name_Here%'' AND ROUTINE_TYPE = ''PROCEDURE''' FROM sys.databases ORDER BY NAME FOR XML PATH(''), TYPE).value('.', 'nvarchar(max)'), 1, 11, '')
EXECUTE sp_executeSQL @SQL