用于打印表名及其列名的SQL语句

时间:2014-10-24 17:50:17

标签: sql sql-server

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)

有什么想法吗?

3 个答案:

答案 0 :(得分:6)

这应该这样做:

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

答案 1 :(得分: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'

答案 2 :(得分:0)

您正在使用哪个Sql Server服务器。对于2008版,请尝试以下查询。此项目列名称及其所属的表。

async def search(ctx, *, message)