选择视图的列

时间:2012-06-29 20:15:59

标签: sql tsql view sql-view

我正在尝试以与view中选择的方式类似的方式选择information_schema.columns的列名。

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

6 个答案:

答案 0 :(得分:58)

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

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

答案 1 :(得分: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

答案 2 :(得分: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

答案 3 :(得分: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>'

答案 4 :(得分:1)

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

    SELECT * FROM sys.all_columns WHERE object_id = OBJECT_ID('<view_name>')

答案 5 :(得分:0)

select schema_name(v.schema_id) as schema_name,
   object_name(c.object_id) as view_name,
   c.column_id,
   c.name as column_name,
   type_name(user_type_id) as data_type,
   c.max_length,
   c.precision
from sys.columns c
join sys.views v 
 on v.object_id = c.object_id
order by schema_name,
     view_name,
     column_id;