【问题标题】:What is the SQL command to return the field names of a table?返回表的字段名称的 SQL 命令是什么?
【发布时间】:2010-09-11 03:49:38
【问题描述】:

假设我有一个名为 myTable 的表。返回该表的所有字段名称的 SQL 命令是什么?如果答案是特定于数据库的,那么我现在需要 SQL Server,但也有兴趣查看其他数据库系统的解决方案。

【问题讨论】:

    标签: sql mysql sql-server database


    【解决方案1】:

    MySQL 3 和 4(和 5):

    desc tablename
    

    这是一个别名

    show fields from tablename
    

    SQL Server(从 2000 年开始)和 MySQL 5:

    select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS 
    where TABLE_NAME = 'tablename'
    

    完成答案:就像下面的人所说,在SQL Server中你也可以使用存储过程sp_help

    exec sp_help 'tablename'
    

    【讨论】:

    • 信息架构在 SQL Server 2000 中也可用。
    • 在 Postgres 中,从 8.0 开始(未检查旧版本)
    【解决方案2】:

    如果你只想要列名,那么

    select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = 'tablename'
    

    在 MS SQL Server 上,有关表的更多信息,例如列的类型,请使用

    sp_help 'tablename'
    

    【讨论】:

      【解决方案3】:

      SQL-92 标准定义了符合 rdbms 的 INFORMATION_SCHEMA,如 MS SQL Server 支持。以下适用于 MS SQL Server 2000/2005/2008 和 MySql 5 及更高版本

      select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = 'myTable'
      

      MS SQL 服务器特定:

      exec sp_help 'myTable'
      

      此解决方案返回几个结果集,其中包含您想要的信息,而前者提供的正是您想要的。

      也只是为了完整性,您可以直接查询 sys 表。不建议这样做,因为架构可以在 SQL Server 版本之间更改,并且 INFORMATION_SCHEMA 是这些表之上的抽象层。但无论如何,对于 SQL Server 2000 来说都是这样

      select [name] from dbo.syscolumns where id = object_id(N'[dbo].[myTable]')
      

      【讨论】:

        【解决方案4】:

        MySQL 也一样:

        select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = 'tablename'
        

        【讨论】:

          【解决方案5】:

          您可以使用提供的系统视图来执行此操作:

          例如

          select * from INFORMATION_SCHEMA.COLUMNS
          where table_name = '[table name]'
          

          或者,您可以使用系统 proc sp_help

          例如

          sp_help '[table name]'
          

          【讨论】:

            【解决方案6】:

            这也是 MySQL 特有的:

            show fields from [tablename];
            

            这不仅会显示表名,还会提取有关字段的所有信息。

            【讨论】:

              【解决方案7】:

              MySQL

              describe tablename
              

              【讨论】:

                【解决方案8】:

                对于那些在 Oracle 中寻找答案的人:

                SELECT column_name FROM user_tab_columns WHERE table_name = 'TABLENAME'
                

                【讨论】:

                  【解决方案9】:

                  PostgreSQL 理解

                  select column_name from information_schema.columns where table_name = 'myTable'
                  

                  语法。如果你在 psql shell 中工作,你也可以使用

                  \d myTable
                  

                  用于描述(列,以及它们的数据类型和约束)

                  【讨论】:

                    【解决方案10】:

                    为了完整起见,因为已经提到了 MySQL 和 Postgres:对于 SQLite,请使用“pragma table_info()

                    sqlite> pragma table_info('table_name');
                    cid         name        type        notnull     dflt_value  pk        
                    ----------  ----------  ----------  ----------  ----------  ----------
                    0           id          integer     99                      1         
                    1           name                    0                       0         
                    

                    【讨论】:

                      【解决方案11】:

                      在 Sybase SQL Anywhere 中,列和表信息是分开存储的,所以需要一个连接:

                      select c.column_name from systabcol c 
                             key join systab t on t.table_id=c.table_id 
                             where t.table_name='tablename'
                      

                      【讨论】:

                        【解决方案12】:

                        对于 IBM DB2(将在星期一仔细检查以确保。)

                        SELECT TABNAME,COLNAME from SYSCAT.COLUMNS where TABNAME='MYTABLE'
                        

                        【讨论】:

                          猜你喜欢
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 2022-09-28
                          • 2023-02-21
                          • 1970-01-01
                          • 2017-06-19
                          • 2015-03-14
                          相关资源
                          最近更新 更多