【问题标题】:How do I list all the columns in a table?如何列出表中的所有列?
【发布时间】:2010-12-07 12:25:03
【问题描述】:

对于各种流行的数据库系统,如何列出一个表中的所有列?

【问题讨论】:

标签: sql mysql sql-server database oracle


【解决方案1】:

对于 SQL Server

sp_help tablename

【讨论】:

    【解决方案2】:

    MS SQL Server中调用以下代码:

    sp_columns [tablename]
    

    【讨论】:

      【解决方案3】:

      对于 MySQL,使用:

      DESCRIBE name_of_table;
      

      只要您使用 SQL*Plus 或 Oracle 的 SQL Developer,这也适用于 Oracle。

      【讨论】:

      • 此解决方案适用于 MYSQL 而不是 MSSQL
      • @dmvianna 我认为这不一定适用于所有 Oracle,但适用于 SQL*Plus。
      • 应该是DESCRIBE name_of_table``;
      • 对于 sqlite - 使用:pragma table_info(table_name) 即 sqlite> pragma table_info(column1);
      • 编辑,因为DESCRIBE 不是Oracle PLSQL 指令而是a SQL*Plus command,因此它在大多数SQL IDE 中不起作用。
      【解决方案4】:

      SQL 服务器

      SELECT 
          c.name 
      FROM
          sys.objects o
      INNER JOIN
          sys.columns c
      ON
          c.object_id = o.object_id
      AND o.name = 'Table_Name'
      

      SELECT 
          COLUMN_NAME 
      FROM 
          INFORMATION_SCHEMA.COLUMNS
      WHERE 
          TABLE_NAME  = 'Table_Name'
      

      第二种方式是 ANSI 标准,因此应该适用于所有符合 ANSI 的数据库。

      【讨论】:

      • 这些都不是为 MS SQL Server 编写的(或至少是隐含的,因为我读过它)。在这两种情况下,表名列都存储了名称没有任何[],因此查询不能使用它们,只能使用普通表名。如果这不是 OP 的意图,至少要意识到这一点。
      • @JonBrave - 没错,方括号的含义是 “在此处插入您的表名” :)
      • 作为方括号,我将其读作“在方括号内插入您的表名(因为可能是保留字)”,然后没有匹配项 :) 也许BNF <Table Name> 会避免歧义。无论如何,我意识到你可能在我写评论时有意这样做 --- 以防万一,警告其他人并没有什么坏处。
      • 只有在没有 '[ ]' 并且表名周围需要引号 ' ' 时才适用于 MSSQL。
      【解决方案5】:

      我知道已经晚了,但我将这个命令用于 Oracle:

      select column_name,data_type,data_length from all_tab_columns where TABLE_NAME = 'xxxx' AND OWNER ='xxxxxxxxxx'
      

      【讨论】:

      【解决方案6】:

      Microsoft SQL Server Management Studio 2008 R2:

      在查询编辑器中,如果您突出显示表名的文本(例如 dbo.MyTable)并点击 ALT+F1,您将获得一个列列表名称、类型、长度等。

      ALT+F1 当您突出显示 dbo.MyTable 时相当于运行 EXEC sp_help 'dbo.MyTable' according to this site

      我无法让查询 INFORMATION_SCHEMA.COLUMNS 的变体起作用,所以我改用它。

      【讨论】:

      • 在 SSMS 2012 中不起作用。顺便说一句,您是说 SQL Server Management Studio 2008 吗?
      • 是的,更准确地说,我指的是 Microsoft SQL Server Management Studio 2008 R2。我会编辑。
      【解决方案7】:

      (5年后,为了PostgreSQL的荣誉,王国最先进的DDBB)

      在 PostgreSQL 中:

      \d table_name
      

      或者,使用 SQL:

      select column_name, data_type, character_maximum_length
          from INFORMATION_SCHEMA.COLUMNS 
          where table_name = 'table_name';
      

      【讨论】:

      • 应该是 \d table_name。 \dt table_name 列出关系。
      【解决方案8】:

      例子:

      select Table_name as [Table] , column_name as [Column] , Table_catalog as [Database], table_schema as [Schema]  from information_schema.columns
      where table_schema = 'dbo'
      order by Table_name,COLUMN_NAME
      

      只是我的代码

      【讨论】:

        【解决方案9】:

        对 SQL Server 中的其他部分稍作修正(模式前缀变得越来越重要!):

        SELECT name
          FROM sys.columns 
          WHERE [object_id] = OBJECT_ID('dbo.tablename');
        

        【讨论】:

          【解决方案10】:

          SQL 服务器

          列出数据库的所有用户定义表:

          use [databasename]
          select name from sysobjects where type = 'u'
          

          列出表格的所有列:

          use [databasename]
          select name from syscolumns where id=object_id('tablename')
          

          【讨论】:

          • 嘿?这是错误的...您只能将 USE 用于数据库...并且查询返回数据库中所有用户定义的表,这不是 OP 想要的。
          【解决方案11】:

          对于 MS SQL Server:

          select * from information_schema.columns where table_name = 'tableName'
          

          【讨论】:

          • 此处感兴趣的列是 COLUMN_NAME。
          • 这应该适用于许多 DBMS。 information_schema.columns 系统视图是 ANSI SQL 标准 (link) 的一部分。
          • 很好的答案,但为了避免重复,我会使用:select COLUMN_NAME from information_schema.columns where table_name = 'tableName' and table_schema = 'databaseName'
          • 这是符合 SQL-92 ANSI 标准的,应该适用于所有数据库引擎。
          【解决方案12】:

          对于 Oracle (PL/SQL)

          SELECT column_name
          FROM user_tab_cols
          WHERE table_name = 'myTableName'
          

          对于 MySQL

          SHOW COLUMNS FROM table_name
          

          【讨论】:

          • 您可能希望按 column_id 排序 Oracle 查询
          • 对于 Oracle 也有效DESCRIBE name_of_table
          • 使用 ;在 中显示列,例如 '%';将让您仅列出以指定前缀开头的列。当然省略尖括号。
          • 您的查询中的user_tab_cols 是什么?
          • @Jogi - Google "oracle user_tab_cols" - 它内置在 Oracle 数据库中。
          猜你喜欢
          • 2011-07-31
          • 2016-12-06
          • 2018-08-08
          • 2023-03-31
          • 1970-01-01
          • 2020-06-22
          • 1970-01-01
          • 1970-01-01
          • 2015-08-16
          相关资源
          最近更新 更多