SQL Server 2008 R2でテーブルを使用しているストアドプロシージャまたはトリガーを知るにはどうすればよいですか?


9

これは、私がチェックしているDBに、ユーザー履歴を保持するアーカイブテーブルがあり、しばらくするとこのテーブルから行を削除するトリガーまたはストアプロシージャがあり、同じように、私はDBを設計しませんでした。このDBを使用するアプリケーションのメンテナンスを行っているだけなので、これらのストアドプロシージャまたはトリガーの名前がわかりません。このストアドプロシージャを探します。またはトリガーして、コードを確認し、この「ユーザー履歴」をテーブルに長く残すようにコードを変更します。

誰かが「sysobjects」テーブルをチェックするように言われました。そこでは、テーブルの同じ名前の何かが実際に表示されますが、これは私が取得できた唯一の情報です。アドバイスはありますか?

ありがとうございました。

回答:


6

sys.sql_modulesを使用してすべてのコードを検索します

SELECT OBJECT_NAME(object_id)
FROM sys.sql_modules sm
WHERE definition LIKE '%Mytable%'

または完全に無料のRed Gate SQL Searchを使用する

syscommentsまたはINFORMATION_SCHEMA.RUBBISHを使用しないでください


フェローは、ターゲットテーブルを右クリックして、[依存関係の表示](またはその効果のテキスト)をクリックすることもできませんか?
Nick Chammas

@Nick Chammas:いいえ、これは信頼性が低いとしてよく知られています
gbn

@ gbn、syscommentsは下位互換性のためであり、将来のリリースから削除される可能性があることを理解していますが、INFORMATION_SCHEMAを使用しない理由について詳しく説明できますか?thx
datagod

@datagod:syscommentsが常に不適切な選択肢である理由:定義列はnvarchar(4000)です。つまり、4000を超える文字列位置にある場合、またはnvarchar(4000)行の境界にまたがっている場合は、テーブル参照が
失われる

@gbn実際にsyscommentsは、4000文字の制限を超えるオブジェクトの複数の行があり、それを使用してクエリをと同じように有効にしsys.sql_modulesます。ですsys.sql_modulesのでsyscomments減価償却中ですのでお勧めです。
ケネスフィッシャー

4

ApexSQL Searchを試す

ApexSQL Searchは無料のSQL Server Management StudioおよびVisual Studioアドインであり、他の機能の中でも特に、依存関係の表示機能があります。依存関係の表示機能には、暗号化されたオブジェクトとシステムオブジェクトの間の関係、SQL Server 2012固有のオブジェクト、透過的データ暗号化(TDE)で暗号化されたデータベースに格納されたオブジェクトなど、すべてのSQLデータベースオブジェクトの関係を視覚化する機能があります

依存関係の表示機能では、表示される関係、生成された図のレイアウトとサイズ、依存関係のドリルダウンの深さなど、視覚的な依存関係の図のレイアウトを設定およびカスタマイズすることもできます。

免責事項:私はApexSQLでサポートエンジニアとして働いています


2

2008年の将来の参考のために、使用できるDMVもあります。 sys.dm_sql_referencing_entities。とりわけ誤検知を回避できるため、SQL_Modulesを使用するよりも一般的に好まれます。ここで説明しましたが、基本的に次のようなコードがある場合:

SELECT OBJECT_SCHEMA_NAME(object_id), OBJECT_NAME(object_id) 
FROM sys.sql_modules WHERE [definition] LIKE '%ABC%'

テーブルABC、テーブルABCLog、ビューvw_ABC、ストアドプロシージャsp_Update_ABCなどの結果が得られます。また、私の知る限り、DMVは暗号化されたSPを処理しますが、sql_modulesメソッドは暗号化されていないSPでのみ機能します。 。

同じクエリのDMVバージョンは次のとおりです。

SELECT * FROM sys.dm_sql_referencing_entities('dbo.ABC', 'OBJECT')

1

また、sys.sql_expression_dependenciesカタログビューを使用することもできます。このクエリを使用します。

SELECT 
referencing_object_name = obj.name, 
referencing_object_type_desc = obj.type_desc, 
referenced_object_name = referenced_entity_name
FROM sys.sql_expression_dependencies sd 
INNER JOIN sys.objects obj 
ON sd.referencing_id = obj.[object_id] 
WHERE referenced_entity_name = 'MyTable'
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.