我试图以与从view
中选择的方式类似的方式选择information_schema.columns
的列名。
我似乎找不到办法做到这一点。有没有其他人之前做过这件事或知道它是否可能?
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 docs on the Catalog Views。
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
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>')