information_schema.columns
から選択するのと同様の方法で、view
の列名を選択しようとしています。
私はこれを行う方法を見つけることができないようです。他の誰かがこれを以前にやったことがありますか、それが可能かどうか知っていますか?
information_schema.columns.Table_name(少なくともSql Server 2000の下)にはビューが含まれているので、
SELECT * FROM information_schema.columns WHERE table_name = 'VIEW_NAME'
これを試して:
SELECT *
FROM sys.views
これにより、そのようなビューが得られます-列が必要な場合は、これを使用します:
SELECT *
FROM sys.columns
WHERE object_id = OBJECT_ID('dbo.YourViewNameHere')
INFORMATION_SCHEMA
を使用してそれをどのように実行できるかわからない-sys
スキーマカタログビューと比較して、「不格好」で直感的ではないため、私はそれを使用しません。
使用可能なすべてのビューの詳細、およびそれらに含まれる情報については、 カタログビューのMSDNドキュメント を参照してください。
INFORMATION_SCHEMAビューは、データベース内のオブジェクトに関するメタデータを保持します。 INFORMATION_SCHEMA.COLUMNSは、基盤となるsysテーブルを使用してメタデータを取得します(sp_helptext 'master.Information_schema.columns'を確認してください)。この単純なクエリを使用して、任意のビューで使用される列名を選択できます。
SELECT col.name
FROM <db_name>.sys.columns col, <db_name>.sys.views vew
WHERE col.object_id = vew.object_id
AND vew.name = '<view_name>'
この方法がビューで機能することがわかりました(SQL 2017)。 information_schema.columns
およびsys.columns
からデータを取得できませんでした:
SELECT * FROM sys.all_columns WHERE object_id = OBJECT_ID('<view_name>')
SELECT distinct VIEW_NAME
,TABLE_SCHEMA
,TABLE_NAME
,COLUMN_NAME
FROM INFORMATION_SCHEMA.VIEW_COLUMN_USAGE
--WHERE TABLE_SCHEMA = 'Person'
ORDER BY
VIEW_NAME
,TABLE_SCHEMA
,TABLE_NAME
,COLUMN_NAME