web-dev-qa-db-ja.com

SQL Server(2008)で特定のテーブルを使用しているビューを見つける方法は?

テーブルにいくつかの列を追加する必要があり、このテーブルを使用するすべてのビューにこれらの列を追加する必要もあります。

特定のテーブルを使用するデータベース内のすべてのビューのリストを取得することは可能ですか?

51
Peter

これはそれを行う必要があります:

SELECT * 
FROM   INFORMATION_SCHEMA.VIEWS 
WHERE  VIEW_DEFINITION like '%YourTableName%'
88
James Hill

テーブルの依存関係を見つけるには、sys.sql_expression_dependenciesカタログビューを使用できます。

SELECT 
referencing_object_name = o.name, 
referencing_object_type_desc = o.type_desc, 
referenced_object_name = referenced_entity_name, 
referenced_object_type_desc =so1.type_desc 
FROM sys.sql_expression_dependencies sed 
INNER JOIN sys.views o ON sed.referencing_id = o.object_id 
LEFT OUTER JOIN sys.views so1 ON sed.referenced_id =so1.object_id 
WHERE referenced_entity_name = 'Person'  

ApexSQL Search 依存関係の表示機能も備えた無料のSSMSおよびVSアドインを試すこともできます。依存関係の表示機能には、暗号化されたオブジェクトとシステムオブジェクト、SQL Server 2012固有のオブジェクト、およびTransparent Data Encryption(TDE)で暗号化されたデータベースに保存されたオブジェクト間の関係を含む、すべてのSQLデータベースオブジェクトの関係を視覚化する機能があります

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

12
Milica Medic

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

enter image description here

enter image description here

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

5
marc_s

私はこれがうまくいくと思う:

SELECT type, *
FROM sys.objects
WHERE OBJECT_DEFINITION(object_id) LIKE '%' + @ObjectName + '%'
AND type IN ('V')
ORDER BY name

フィルタリングVIEW_DEFINTION内部INFORMATION_SCHEMA.VIEWSは私にかなりの数の誤検知を与えています。

3
Steven de Salas
SELECT VIEW_NAME
FROM INFORMATION_SCHEMA.VIEW_TABLE_USAGE
WHERE TABLE_NAME = 'Your Table'
2
Dmitry

テーブルを選択->依存関係を表示->依存するオブジェクト

1
Diego