2016-09-12 3 views
2

テーブルがサーバーで使用されているすべてのストアドプロシージャを取得するにはクエリまたはコードが必要です(そのサーバーのすべてのデータベースのすべてのストアドプロシージャが必要です)。SQL Serverでテーブルが使用されているストアドプロシージャをすべて取得する

SELECT * 
FROM sys.procedures 
WHERE OBJECT_DEFINITION(OBJECT_ID) LIKE '%[dbo].[Batch]%. 

上記のクエリは現在のデータベースに与えられますが、そのサーバーのすべてのデータベースから取得するクエリが必要です。

ありがとうございました。 "myqueryという" は、テーブルの名前です

select * from sysobjects where id in 
(select id from syscomments where text like '%myquery%') 
order by [name] 

:サンディープ

+3

次に、サーバー上のすべてのデータベースでそのクエリを実行する必要があります。ここではこれを行うための1つの方法を説明する素晴らしい記事です。 http://sqlblog.com/blogs/aaron_bertrand/archive/2010/12/29/a-more-reliable-and-more-flexible-sp-msforeachdb.aspx他のサーバーはどうですか?あなたはリンクサーバーを通してこのテーブルにアクセスしますか? –

+0

Googleの 'SQL SERVERによって参照されるエンティティ' – dfundako

答えて

0

はこれを試してみてください。これをサーバー上の各データベースで個別に実行する必要があります。

+0

クエリはありがたいですが、このクエリではシステムプロシージャも提供しています。 –

1
EXECUTE master.sys.sp_MSforeachdb 
"USE [?]; SELECT * FROM sys.procedures WHERE OBJECT_DEFINITION(OBJECT_ID) LIKE '%[dbo].[Batch]%'" 

ただ、バッチオブジェクト(dbo.batch、[DBO]。[バッチ]、DBO。[バッチ]、など)の助けを

+0

答えをありがとう。あなたが投稿した上記のクエリを試しましたが、これはテーブルが使われていない他のすべてのSPを与えています。ありがとう。 –

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 
関連する問題