どのストアドプロシージャまたはトリガーがSQL Server 2008 R2でテーブルを使用しているかをどのように知ることができますか?
-
16-10-2019 - |
質問
これは、私がチェックしているDBでは、ユーザーの履歴を保持するアーカイブテーブルがあり、しばらくしてからこのテーブルから行を削除するトリガーまたはストア手順があります。同じように、私はDBを設計しませんでした。このDBを使用するアプリケーションのメンテナンスを取っているだけなので、これらのストアドプロシージャやトリガーの名前がわかりません。または、トリガーし、コードをチェックして変更して、この「ユーザー履歴」をテーブルに長く残します。
誰かが私に「Sysobjects」テーブルをチェックするように言った。ここでは実際にテーブルの名前が付いたものを見ることができるが、これは私が取得できる唯一の情報だ、アドバイス?
ありがとうございました。
解決
使用してすべてのコードを検索します sys.sql_modules
SELECT OBJECT_NAME(object_id)
FROM sys.sql_modules sm
WHERE definition LIKE '%Mytable%'
または使用します Red Gate SQL検索 これは完全に無料です
しない syscommentsまたはinformation_schema.rubbishを使用します
他のヒント
試してみる ApexSQL検索
APEXSQL検索は、無料のSQL Server Management StudioおよびVisual Studioアドインで、他の機能の中でも、ビュー依存関係の機能があります。ビュー依存関係機能には、暗号化されたオブジェクトとシステムオブジェクト、SQL Server 2012固有のオブジェクト、透過データ暗号化(TDE)で暗号化されたデータベースに保存されているオブジェクトの間のものを含む、すべてのSQLデータベースオブジェクトの関係を視覚化する機能があります。
ビュー依存関係の機能では、表示される関係、生成された図のレイアウトとサイズ、依存関係のドリルダウン深度など、視覚依存関係の図のレイアウトを設定してカスタマイズすることもできます。
免責事項:私はサポートエンジニアとしてApexSQLで働いています
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の結果、テーブルはVW_ABCのビュー、ストアドプロシージャSP_UPDATE_ABCなどの結果になります。私の知る限り、DMVは暗号化されていないSPSを処理しますが、SQL_MODULESメソッドは、暗号化されていないSPSでのみ機能します。 。
同じクエリのDMVバージョンは次のとおりです。
SELECT * FROM sys.dm_sql_referencing_entities('dbo.ABC', 'OBJECT')
また、使用することもできます 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'