36

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

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

4

7 回答 7

67

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

SELECT * FROM information_schema.columns WHERE table_name = 'VIEW_NAME'
于 2012-06-29T20:19:57.060 回答
19

试试这个:

SELECT *
FROM sys.views

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

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

不确定如何使用- 我从不使用它,因为与模式目录视图INFORMATION_SCHEMA相比,它感觉相当“笨拙”且不直观。sys

有关所有可用视图的所有详细信息,以及它们可能包含的信息,请参阅目录视图上的 MSDN 文档。

于 2012-06-29T20:18:33.723 回答
4

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

    SELECT * FROM sys.all_columns WHERE object_id = OBJECT_ID('<view_name>')
于 2019-04-27T11:25:06.457 回答
3

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>'
于 2015-09-24T05:28:25.103 回答
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
于 2014-10-15T17:54:33.103 回答
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;
于 2021-04-20T19:13:30.850 回答
0

我需要创建类似的东西,所以我阐述了 Ghost 的建议。我需要按第一个序列降序为数据库顺序中的每个视图创建前 1000 个视图。

SELECT CONCAT (
              'CREATE VIEW dbo.temp_',
              v.name,
              ' AS select top (1000) * from ',
              OBJECT_SCHEMA_NAME (v.object_id),
              '.',
              v.name,
              ' ORDER BY [',
              c.COLUMN_NAME,
              '] DESC;'
          ) AS viewName
FROM sys.views AS v
    LEFT OUTER JOIN INFORMATION_SCHEMA.COLUMNS AS c
             ON v.name = c.TABLE_NAME
WHERE c.ORDINAL_POSITION = 1;

于 2021-08-13T00:22:24.683 回答