2017-12-21 9 views
0

リンクサーバーのビューからデータを使用するストアドプロシージャがmssqlデータベースにあります。 ストアドプロシージャで使用されているこのビューの列とそのデータ型に関する情報を取得する必要があります。Tsqlリンクサーバーのビューのストアドプロシージャで使用する列を取得する方法

私はこれを試みたが、作業をしていない:

SELECT DatabaseName = Isnull(referenced_database_name, Db_name()), 
     StoredProcedureName = 'spr_rpt_CustomerSurvey', 
     SO.objecttype, 
     ObjectName = referenced_entity_name, 
     ColumnName = referenced_minor_name, 
     OrdinalPosition = referenced_minor_id 
FROM sys.Dm_sql_referenced_entities('[dbo].[spr_rpt_CustomerSurvey]', 'OBJECT' 
     ) R 
     CROSS apply (SELECT ObjectType = (CASE type_desc 
              WHEN 'VIEW' THEN 'View' 
              WHEN 'USER_TABLE'THEN'Table' 
              END) 
        FROM sys.objects 
        WHERE object_id = R.referenced_id) SO 
WHERE referenced_minor_name IS NOT NULL 

いくつかのアイデアを??? ありがとうございます。

答えて

0

は、私がリンクサーバーに対してsp_describe_first_result_setを試したことがありません、しかしうまくいくかもしれない...

別のオプションは、これは、ビューの結果が書込まれる新しいテーブル「SomeTable」を作成しますSELECT TOP 1 * INTO SomeTable FROM YourView;

です。これで、このテーブルの列とタイプを確認できます。

リンクされたサーバーもSQL RDBMSですか? INFORMATION_SCHEMA.COLUMNSに対するあなたのケースでINFORMATION_SCHEMAに対するほとんどのSQL RDBMSのサポートクエリ、ビューの名前はかなりおそらくTABLE_NAMEの下で発見されることに、注意してください...

0

ビューの列は

SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'view name' 

TVFの列に記載されていますビューは、リンクサーバー上にある場合は、リンクサーバーからINFORMATION_SCHEMA.COLUMNSを使用する必要があります

SELECT * FROM INFORMATION_SCHEMA.ROUTINE_COLUMNS WHERE TABLE_NAME = 'view name' 

で見つけることができます

SELECT * FROM [linked server].[database name].INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'view name' 
関連する問題