3

次の t-sql コードを使用しています。

USE [my_database]
SELECT DISTINCT so.name
FROM syscomments sc
INNER JOIN sysobjects so ON sc.id=so.id
WHERE sc.TEXT LIKE '%table_name%'

テーブルを使用するすべてのストアド プロシージャを表示するためtable_name

データベース内のすべてのテーブルに対してこの作業を行いたいです。

このタスクを実行して出力を整理するにはどうすればよいですか?

4

4 に答える 4

1

JOINonを実行できますLIKE:

select * from INFORMATION_SCHEMA.TABLES t
join
(
    SELECT DISTINCT so.name
    FROM syscomments sc
    INNER JOIN sysobjects so ON sc.id=so.id
) x on x.name like '%' + t.TABLE_NAME + '%'

クエリは proc に限定されないことに注意してください。ビュー、デフォルト、およびその他のオブジェクトも取得します。プロシージャだけが必要な場合はwhere so.xtype = 'P'、内部クエリに追加できます。

于 2013-07-01T14:52:58.947 に答える
1

少なくとも SQL 2005 以降に存在し、テーブル、ビュー、およびストアド プロシージャに対して機能する組み込み関数を使用することもできます。かなりエンタープライズデータベースのテーブルの依存関係をチェックすると、上記のダニエルの回答と同じ数の結果が得られます。

sp_depends [TableName]

sp_depends [TableName.Column]

sp_depends [StoredProcedureName]

http://msdn.microsoft.com/en-us/library/ms189487(v=sql.90).aspx

于 2014-11-17T20:06:18.317 に答える
1

sysテーブルのみを使用する別のバージョン:

select t.name as TableName, p.name as SPName
from sys.objects t
join sys.syscomments c
    on c.text like '%' + t.name + '%'
join sys.objects p
    on p.object_id = c.id
where t.type = 'U' -- user table
and p.type = 'P'   -- procedure 
于 2013-07-01T14:56:38.977 に答える