【问题标题】:How do I get a list of columns in a table or view?如何获取表或视图中的列列表?
【发布时间】:2013-10-30 15:31:38
【问题描述】:

有时,我有兴趣在我的 SQL Server 2008 R2 数据库中的一个表或视图中获取列列表。例如,如果您在不使用昂贵的现成产品的情况下构建数据库文档,它就很有用。

获取此信息的简单方法是什么?

【问题讨论】:

  • 这里提供的很多答案都很棒,但我认为对于 db 文档来说,最重要的信息之一是列描述,其他答案都没有提供。
  • 您是否真的尝试过任何建议的方法?我建议的方式将为您提供列描述如下“object_id,name,column_id,system_type_id,user_type_id,max_length,precision,scale,collat​​ion_name,is_nullable,is_ansi_padded,is_rowguidcol,is_identity,is_computed,is_filestream,is_replicated,is_non_sql_subscribed,is_merge_published,is_dts_replicated等等nnnnnnnnn是不是列描述不够????
  • 总共返回近 50 列,所有列都包含有关视图中每一列的详细信息。对我来说,“列描述”似乎足够了。
  • @MuhammedAli -- 无需冒犯。当然,我尝试了所有建议的方法。我发布的答案中的“描述”列显示了我所说的列描述。它来自 sys.extended_properties 视图。您可以在 SQL Server Management Studio 中配置对列的描述,例如,在设计表时。它是表定义下方“属性”列表中的字段之一。
  • 事实上,您可能有兴趣知道您还可以在每个表上定义描述,再次以 SSMS 为例,在设计表时按 F4 以显示表属性。它又是属性列表中的字段之一。

标签: sql sql-server sql-server-2008 sql-server-2008-r2


【解决方案1】:

在 SQL Server 2008 R2(以及其他版本)中,每个数据库都会自动提供系统视图。只要您连接到表所在的数据库,就可以运行如下查询:

DECLARE @TableViewName NVARCHAR(128)
SET @TableViewName=N'MyTableName'

SELECT b.name AS ColumnName, c.name AS DataType, 
b.max_length AS Length, c.Precision, c.Scale, d.value AS Description
FROM sys.all_objects a
INNER JOIN sys.all_columns b
ON a.object_id=b.object_id
INNER JOIN sys.types c
ON b.user_type_id=c.user_type_id
LEFT JOIN sys.extended_properties d
ON a.object_id=d.major_id AND b.column_id=d.minor_id AND d.name='MS_Description'
WHERE a.Name=@TableViewName
AND a.type IN ('U','V')

当然,这只是一个起点。每个数据库中都有许多其他系统视图和列可用。您可以通过Views > "System Views下的 SQL Server Management Studio 找到它们

【讨论】:

    【解决方案2】:

    sp_columns 返回有关表中每一列的详细信息。 SO Answer

    sp_columns @tablename

    sp_help 返回有关整个表的详细信息,包括列和约束。 SO Answer

    sp_help @tablename

    【讨论】:

    • 很好,但据我所知,不提供对列描述的访问权限。
    【解决方案3】:

    另一种方法是查询 INFORMATION_SCHEMA.columns 视图,详见此处:

    Information_Schema - COLUMNS

    这将为您提供当前数据库中所有列的信息(以及它们所属的表/视图),包括它们的数据类型、精度、排序规则以及它们是否允许空值等

    同样有用的是,这些视图也在多个 DBMS 程序中维护,因此您可以使用相同或相似的查询来获取有关 MySQL 数据库的相同信息,就像获取 SQL Server 数据库一样,如果您正在多个平台上开发。

    【讨论】:

    • 就像 blachniet 的回答一样,这也是一个很好的解决方案,但据我所知,它仍然无法访问列描述。
    • 啊,您没有在问题中提到扩展属性,在这种情况下,加入 sys.columns 和 sys.extended_properties 应该可以解决问题。 information_schema 视图值得记住,因为它们暴露了很多信息,就像我提到的那样,也存在于其他 DBMS 中,例如 MySQL
    【解决方案4】:

    要获得Columns of a view 和其他一些关于该列的information 列表,您可以使用以下内容:

    SELECT * FROM sys.columns c, sys.views v
       WHERE c.object_id = v.object_id
       AND v.name = 'view_Name'
    GO
    

    如果您只想要Column Name 的列表,请使用此列表。

    SELECT c.name 
    FROM sys.columns c, sys.views v
    WHERE c.object_id = v.object_id
    AND v.name = 'view_UserAssessphers'
    GO
    

    【讨论】:

      【解决方案5】:
      exec sp_helptext <your view name>
      

      也仅适用于视图,如果您需要有关表中列的详细信息,blachniet 的答案是最好的。

      【讨论】:

        【解决方案6】:

        在新的查询窗口中,输入视图/表的名称,突出显示它,然后按 Alt-F1。这将运行 sp_help,就像 blachniet 建议的那样。

        【讨论】:

          【解决方案7】:

          没有任何进一步信息的列名的简单列表。

          SELECT COLUMN_NAME FROM TABLENAME.INFORMATION_SCHEMA.COLUMNS;
          

          TABLENAME 替换为您的表名。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2011-02-19
            • 1970-01-01
            • 1970-01-01
            • 2011-06-25
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多