web-dev-qa-db-ja.com

SQL Serverのテーブルを参照するオブジェクトを決定する

私はSQL Server 2008を使用していますが、1500を超える列と約500のストアドプロシージャを持つデータベースがあります。

複数のリレーションを持ち、多くのストアドプロシージャとビューで参照されるテーブルの名前を変更したい...

このテーブルと関係があるデータベース内のすべてのアイテムを取得するにはどうすればよいですか?

ありがとう。

28
Tavousi

データベースオブジェクト(テーブル、列、トリガーなど)を名前で検索する必要がある場合-[〜#〜] free [〜#〜]これを行う SQL Search と呼ばれるRed-Gateツール-データベース全体であらゆる種類の文字列を検索します。

enter image description here

enter image description here

DBAやデータベース開発者にとっては必須のツールです-絶対に[〜#〜] free [〜#〜]であることはすでに述べましたかあらゆる種類の用途に使用しますか?

12
marc_s

sys.dm_sql_referencing_entities

SELECT 
    referencing_schema_name, referencing_entity_name, referencing_id, 
    referencing_class_desc, is_caller_dependent
FROM 
    sys.dm_sql_referencing_entities ('mySchemaName.myTableName', 'OBJECT');
GO

どこ 'mySchemaName.myTableName'は、schema.tableです。たとえば、'dbo.MyTable'

40
Mitch Wheat

それは私が見つけた別の解決策です。ツールをインストールする必要はありません。クエリアナライザで実行するだけです。

Use [Database]
Go

SELECT
referencing_schema_name = SCHEMA_NAME(o.SCHEMA_ID),
referencing_object_name = o.name,
referencing_object_type_desc = o.type_desc,
referenced_schema_name,
referenced_object_name = referenced_entity_name,
referenced_object_type_desc = o1.type_desc,
referenced_server_name, referenced_database_name
--,sed.* -- Uncomment for all the columns
FROM
sys.sql_expression_dependencies sed
INNER JOIN
sys.objects o ON sed.referencing_id = o.[object_id]
LEFT OUTER JOIN
sys.objects o1 ON sed.referenced_id = o1.[object_id]
WHERE
referenced_entity_name = 'SP_Pay_GetData'
order by referencing_object_name
11