オブジェクトの依存関係の表示
SQL Server 2008 からは、オブジェクト(ビューやストゕド プロシージャ、ユーザー定義関数 など)の依存関係を表示するための機能として、次の 3 つのビュー(関数)が追加されました。
sql_expression_dependencies
dm_sql_referencing_entities
dm_sql_referenced_entitiesこれらのビューにより、ストゕド プロシージャが依存しているテーブルや、ユーザー定義関数を 利用しているオブジェクトを容易に把握できるようになったので、大変便利です。
Let's Try
それでは、これを試してみましょう。
1. まずは、sampleDB データベースの「emp」テーブルをもとに、ビューとユーザー定義関 数、ストゕド プロシージャを作成しましょう。
USE sampleDB go
-- ビュー empView の作成(emp テーブルに依存)
CREATE VIEW dbo.empView AS
SELECT empno, empname FROM emp go
-- ユーザー定義関数 empFunc1 の作成
CREATE FUNCTION dbo.empFunc1(@p1 int) RETURNS int BEGIN
RETURN @p1 * 100
END
go
-- ストアドプロシージャ empProc1 の作成(empFunc1 と empView に依存)
CREATE PROC empProc1 AS
SELECT dbo.empFunc1(empno) FROM emp go
-- ストアドプロシージャ empProc2 の作成(empProc1 に依存)
CREATE PROC empProc2 AS
EXEC empProc1
go
sql_expression_dependencies
2. 次に、sql_expression_dependencies カタログ ビューを利用して、作成したオブジェク トの依存関係を表示してみましょう。
SELECT OBJECT_NAME( referencing_id ), referenced_entity_name AS 依存元, * FROM sys.sql_expression_dependencies
sql_expression_dependencies ビューでは、referenced_entity_name 列を参照するこ とで依存元となっているオブジェクトを取得することができます。empView が emp テー ブ ル へ 依 存 し て い る こ と 、 empProc1 ス ト ゕ ド プ ロ シ ー ジ ャ が emp テ ー ブ ル と empFunc1 ユーザー定義関数に依存していることを確認できたと思います。
dm_sql_referenced_entities
dm_sql_referenced_entities 動的管理関数を利用すると、依存元の列名を取得することもできま す。では、これを試してみましょう。
3. 次のように記述して、empView ビューが依存している列名を取得してみます。
SELECT referenced_entity_name AS 依存元, referenced_minor_name AS 依存元の列名, * FROM sys.dm_sql_referenced_entities ('dbo.empView', 'OBJECT')
dm_sql_referenced_entities 関数では、第 1 引数へ依存関係を調べたいオブジェクト名を 指定することで、referenced_minor_name 列で依存元の列名を取得することができます。
依存関係を GUI で確認
オブジェクト間の依存関係は、Management Studio を利用して、グラフゖカルに確認することも できます。では、これを試してみましょう。
1. 次のようにストゕド プロシージャ「empProc2」を右クリックして、[依存関係の表示]を クリックします。
[オブジェクトの依存関係]ダゕログでは、「empProc2 に依存するオブジェクト」をク リックすると、依存元のオブジェクトを階層表示することができます。
このように、SQL Server 2008 からは、オブジェクト間の依存関係を簡単に表示できるよう になったので、大変便利です。
1
2
依存関係をグラフゖカル に確認可能