选择视图的列

问题描述 投票:29回答:5

我试图以与从view中选择的方式类似的方式选择information_schema.columns的列名。

我似乎找不到办法做到这一点。有没有其他人之前做过这件事或知道它是否可能?

sql tsql view sql-view
5个回答
58
投票

information_schema.columns.Table_name(至少在Sql Server 2000下)包含视图,所以只需使用

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

13
投票

试试这个:

SELECT *
FROM sys.views

这为您提供了这样的视图 - 如果您需要列,请使用:

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

不知道如何使用INFORMATION_SCHEMA来做到这一点 - 我从不使用它,因为与sys架构目录视图相比,它感觉相当“笨重”且不直观。

有关所有可用视图的所有详细信息以及它们可能包含的信息,请参阅MSDN docs on the Catalog Views


1
投票
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
投票

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
投票

我发现这种方式适用于视图(SQL 2017)。我无法从information_schema.columnssys.columns获取数据:

    SELECT * FROM sys.all_columns WHERE object_id = OBJECT_ID('<view_name>')
© www.soinside.com 2019 - 2024. All rights reserved.