• 検索結果がありません。

オブジェクトの依存関係の表示

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

依存関係をグラフゖカル に確認可能