2017-09-11 11 views
1

特定のストアドプロシージャ内で使用される、参照された関数名のリストを取得します。ストアドプロシージャ内で参照された関数を取得する

私はそれのほとんどを達成するために、このクエリを使用:

select 
    ROUTINE_DEFINITION 
from 
    sys.dm_sql_referenced_entities('[mac].[pr_custom_test_load]', 'OBJECT') sed 
inner join 
    SYS.OBJECTS so ON so.object_id = sed.REFERENCED_ID AND so.type = 'FN' AND sed.referenced_schema_name = 'mac' 
inner join 
    INFORMATION_SCHEMA.ROUTINES isr ON isr.ROUTINE_NAME=SED.referenced_entity_name AND ROUTINE_TYPE = 'FUNCTION'; 

問題を私が直面していますいくつかのシナリオであり、ストアドプロシージャ内で作成されたいくつかのテーブルがあります。したがって、プロシージャーが実行されない場合、上記のステートメントは、参照されたオブジェクトの残りが作成されなかったことを示すことに失敗します。

ストアドプロシージャ内で参照される関数を取得する他の方法はありますか?

答えて

0

OK最後に、私は次のクエリで実現:

select ROUTINE_DEFINITION FROM sys.sql_expression_dependencies AS sed 
INNER JOIN sys.objects AS o ON sed.referencing_id = o.object_id AND sed.referenced_schema_name = 'mac' 
inner join INFORMATION_SCHEMA.ROUTINES isr ON isr.ROUTINE_NAME=SED.referenced_entity_name AND ROUTINE_TYPE = 'FUNCTION' 
WHERE referencing_id = OBJECT_ID('[mac].[pr_custom_test_load]'); 

あなたはプロシージャ定義で参照されている作成する参照先のテーブルを必要としないsys.sql_expression_dependenciesを使用します。 sys.dm_sql_referenced_entitiesの場合、プロシージャ定義内で参照されるテーブルは終了する必要があります。

関連する問題