8

何百ものテーブルとストアド プロシージャを含む巨大なデータベースがあります。SQL Server 2005 を使用して、特定のテーブルで挿入または更新操作を実行しているストアド プロシージャのリストを取得するにはどうすればよいですか。

4

7 に答える 7

14

sys.sql_dependenciessproc がクエリに含めるテーブルや列など、依存関係を持つエンティティのリストがあります。依存関係を取得するクエリの例については、この投稿を参照してください。以下のコード スニペットは、ストアド プロシージャによってテーブル/列の依存関係のリストを取得します。

select sp.name       as sproc_name
      ,t.name        as table_name
      ,c.name        as column_name
 from sys.sql_dependencies d
 join sys.objects t
   on t.object_id = d.referenced_major_id
 join sys.objects sp
   on sp.object_id = d.object_id
 join sys.columns c
   on c.object_id = t.object_id
  and c.column_id = d.referenced_minor_id
where sp.type = 'P'
于 2008-09-23T14:27:48.183 に答える
10
select
  so.name,
  sc.text
from
  sysobjects so inner join syscomments sc on so.id = sc.id
where
  sc.text like '%INSERT INTO xyz%'
  or sc.text like '%UPDATE xyz%'

これにより、特定のテーブルの INSERT または UPDATE を含むすべてのストアド プロシージャ コンテンツのリストが得られます (明らかにクエリを調整して調整できます)。また、返されるレコードセット内の複数の行にまたがる長いプロシージャは分割されるため、結果を手動でふるいにかける必要がある場合があります。

編集:SP名も返すようにクエリを微調整しました。また、上記のクエリは UDF と SP を返すことに注意してください。

于 2008-09-23T08:02:49.903 に答える
2

sys.dm_sql_referencing_entities を使用する

sp_depends は廃止されたことに注意してください。

MSDN リファレンス

于 2008-09-23T08:01:57.377 に答える
1

Vyaskn の Web サイトから sp_search_code をダウンロードすると、データベース オブジェクト内の任意のテキストを検索できます。

http://vyaskn.tripod.com/sql_server_search_stored_procedure_code.htm

于 2008-09-23T09:48:48.853 に答える
1

すべてのストアド プロシージャをテキスト ファイルにエクスポートしてから、単純な検索を使用できます。

より高度な手法は、正規表現検索を使用してすべての SELECT FROM および INSERT FROM エントリを見つけることです。

于 2008-09-23T07:56:42.507 に答える
1

これはうまくいくようです:

select   
so.name as [proc],   
so2.name as [table],   
sd.is_updated   
from sysobjects so   
inner join sys.sql_dependencies sd on so.id = sd.object_id  
inner join sysobjects so2 on sd.referenced_major_id = so2.id  
where so.xtype = 'p' -- procedure  
and is_updated = 1 -- proc updates table, or at least, I think that's what this means
于 2008-09-23T08:08:09.513 に答える
0
SELECT Distinct SO.Name
FROM sysobjects SO (NOLOCK)
INNER JOIN syscomments SC (NOLOCK) on SO.Id = SC.ID
AND SO.Type = 'P'
AND (SC.Text LIKE '%UPDATE%' OR SC.Text LIKE '%INSERT%')
ORDER BY SO.Name

このリンクは SP 検索のリソースとして使用されました。

于 2008-09-23T08:00:36.037 に答える