【问题标题】:SQL statement to print table names and their column names打印表名及其列名的 SQL 语句
【发布时间】:2014-10-24 17:50:17
【问题描述】:
SELECT TABLE_NAME 
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_TYPE = 'BASE TABLE' 
ORDER BY TABLE_NAME ASC

我正在使用此代码打印数据库的表名。我想要做的是打印每个表中的表名和列名。我可以通过嵌套语句来做到这一点吗?

此代码正在 SQL Server 上的查询窗口中运行。

我试过了

SELECT COL_NAME 
FROM 
    (SELECT TABLE_NAME 
     FROM INFORMATION_SCHEMA.TABLES 
     WHERE TABLE_TYPE = 'BASE TABLE' 
     ORDER BY TABLE_NAME ASC)

有什么想法吗?

【问题讨论】:

  • SHOW TABLES 和 SHOW [FULL] COLUMNS {FROM | IN} tbl_name [{FROM | IN} db_name] [LIKE 'pattern' | WHERE expr]
  • +1 你为什么不给这个人投票,他提出了有趣的问题,并展示了他的尝试!
  • 谢谢 meda,我被卡住了。

标签: sql sql-server


【解决方案1】:

应该这样做:

SELECT C.TABLE_NAME, C.COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS C
WHERE EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLES T 
              WHERE T.TABLE_TYPE='BASE TABLE' AND C.TABLE_NAME=T.TABLE_NAME)
ORDER BY C.TABLE_NAME, C.COLUMN_NAME

【讨论】:

    【解决方案2】:

    在 Sqlserver 2005 中,首先引入了 INFORMATION_SCHEMA 视图。

    创建这些视图主要是为了获取表名等元数据, 列名,列的数据类型等关于表,列,视图, 域等

    每个数据库都包含这些视图。如果您想检查幕后发生的事情,您可以通过执行 sp_helptext 来检查这些视图的逻辑。喜欢

    sp_helptext INFORMATION_SCHEMA.COLUMNS

    通过使用上述视图,您可以获得所需的结果。请检查以下查询。

    SELECT T.TABLE_NAME,C.COLUMN_NAME,C.DATA_TYPE
        FROM INFORMATION_SCHEMA.COLUMNS C
        INNER JOIN INFORMATION_SCHEMA.TABLES T ON C.TABLE_NAME = T.TABLE_NAME
            AND C.TABLE_SCHEMA = T.TABLE_SCHEMA
        WHERE T.TABLE_TYPE = 'BASE TABLE'
    

    【讨论】:

    • @rene 没找到你。
    • 嘿@rene 感谢您的指导。 :) 更新的答案。我希望它将来会对其他人有所帮助。
    【解决方案3】:

    使用 Mssql 2008 版本尝试以下查询。此条目列名称及其所属的表。

    SELECT  c.name  AS 'ColumnName', t.name AS 'TableName'
    FROM        sys.columns c
    JOIN        sys.tables  t   ON c.object_id = t.object_id
    WHERE       c.name = c.name
    ORDER BY    TableName, ColumnName;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-10-29
      • 2019-06-03
      • 1970-01-01
      • 1970-01-01
      • 2018-04-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多