我正在尝试以与view
中选择的方式类似的方式选择information_schema.columns
的列名。
我似乎找不到办法做到这一点。有没有其他人之前做过这件事,或者知道它是否可能?
答案 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.columns
和sys.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;