2017-07-06 6 views
0

同じサーバー内の異なるデータベースのテーブルを大量に含むストアドプロシージャを作成しました。今私はすべてのテーブルに対応する特定のストアドプロシージャをリストする必要があります。 次のクエリを試しましたが、特定のデータベースのみに関連するテーブルのみが表示されます。ストアドプロシージャで使用されるすべてのデータベースのテーブルのリスト

問合せは、ここに添付されています

SELECT 
    t.TABLE_NAME, 
    s.ROUTINE_NAME, 
    s.SPECIFIC_SCHEMA 
FROM INFORMATION_SCHEMA.TABLES t 
INNER JOIN INFORMATION_SCHEMA.ROUTINES s 
    ON s.ROUTINE_NAME IN (SELECT 
    referencing_entity_name 
    FROM sys.dm_sql_referencing_entities(TABLE_SCHEMA + '.' + TABLE_NAME, 'OBJECT')) 
    AND s.ROUTINE_TYPE = 'PROCEDURE' 
WHERE t.TABLE_TYPE = 'BASE TABLE' 
AND s.ROUTINE_NAME LIKE '%Procedure name%' 
ORDER BY s.ROUTINE_NAME 
+1

これまでに何を試しましたか? – vaso123

+1

SELECT t.TABLE_NAME、s.ROUTINE_NAME、s.SPECIFIC_SCHEMA INFORMATION_SCHEMA.TABLESさt から内は(sys.dm_sql_referencing_entities FROM ( SELECT referencing_entity_name IN + '' + TABLE_NAME TABLE_SCHEMAをINFORMATION_SCHEMA.ROUTINES S s.ROUTINE_NAME ONをJOIN 'OBJECT') ) とs.ROUTINE_TYPE s.ROUTINE_NAME – thamizharasu

+1

タグBY = 'プロシージャ' t.TABLE_TYPE = 'BASEのTABLE' とs.ROUTINE_NAME LIKE '%プロシージャ名%' ORDER DBMSあなたは」再使用します。 (いくつかの製品仕様が使用されています) – jarlh

答えて

0

このクエリは、「spName」ストアドプロシージャで使用されるテーブルのリストが表示されます。また

SELECT TABLE_NAME 
    FROM INFORMATION_SCHEMA.TABLES 

を使用し、

すべてのプロシージャ名の使用を得るために、DB内の全テーブルの一覧を取得するには またDB

内のすべてのストアドプロシージャの詳細を取得するために
SELECT TBL.TABLE_NAME, SR.ROUTINE_NAME,SR.SPECIFIC_SCHEMA 
    FROM INFORMATION_SCHEMA.TABLES TBL 
    INNER JOIN INFORMATION_SCHEMA.ROUTINES SR 
    ON SR.ROUTINE_NAME IN 
    (
      SELECT referencing_entity_name 
      FROM sys.dm_sql_referencing_entities(TABLE_SCHEMA + '.' + TABLE_NAME, 'OBJECT') 
    ) 
    AND SR.ROUTINE_TYPE = 'PROCEDURE' 
    WHERE TBL.TABLE_TYPE = 'BASE TABLE' and SR.ROUTINE_NAME='spName' 

を、この条件を削除することができます

SELECT SPECIFIC_NAME 
    FROM INFORMATION_SCHEMA.ROUTINES 
+0

私はこれを試しましたが、私たちがspを作成したデータベースに属するテーブルだけを示していますが、私は別のデータベースのテーブルを含んでいます – thamizharasu

関連する問題