web-dev-qa-db-ja.com

ビューの列を選択する

information_schema.columnsから選択するのと同様の方法で、viewの列名を選択しようとしています。

私はこれを行う方法を見つけることができないようです。他の誰かがこれを以前にやったことがありますか、それが可能かどうか知っていますか?

29
steventnorris

information_schema.columns.Table_name(少なくともSql Server 2000の下)にはビューが含まれているので、

SELECT * FROM information_schema.columns WHERE table_name = 'VIEW_NAME'
58
Ghost

これを試して:

SELECT *
FROM sys.views

これにより、そのようなビューが得られます-列が必要な場合は、これを使用します:

SELECT * 
FROM sys.columns
WHERE object_id = OBJECT_ID('dbo.YourViewNameHere')

INFORMATION_SCHEMAを使用してそれをどのように実行できるかわからない-sysスキーマカタログビューと比較して、「不格好」で直感的ではないため、私はそれを使用しません。

使用可能なすべてのビューの詳細、およびそれらに含まれる情報については、 カタログビューのMSDNドキュメント を参照してください。

14
marc_s

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>'
1
prabhat

この方法がビューで機能することがわかりました(SQL 2017)。 information_schema.columnsおよびsys.columnsからデータを取得できませんでした:

    SELECT * FROM sys.all_columns WHERE object_id = OBJECT_ID('<view_name>')
1
Karl
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
1