如何从 SQL Server 中特定数据库的表中获取所有列名?

Posted

技术标签:

【中文标题】如何从 SQL Server 中特定数据库的表中获取所有列名?【英文标题】:How can I get all column names from a table from a specific database in SQL Server? 【发布时间】:2021-12-18 00:36:29 【问题描述】:

此查询给出所有数据库中的所有列名。

SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = N'Customers'

但我需要从特定数据库的表中获取所有列名。因为我有多个同名的表。怎么做?有没有类似的

SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE DATABASE_NAME = 'database_name' TABLE_NAME = 'table_name'

我正在使用 xampp 服务器和 phpMyAdmin。

【问题讨论】:

【参考方案1】:

引用the fine manual:

26.3.8 INFORMATION_SCHEMA 列表

...

COLUMNS 表有这些列:

TABLE_CATALOG

The name of the catalog to which the table containing the column belongs. This value is always def.

TABLE_SCHEMA

The name of the schema (database) to which the table containing the column belongs.

...

..你应该在SELECT * 时看到它?

【讨论】:

【参考方案2】:

这是我预期结果的 SQL

SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA='database_name' AND TABLE_NAME = 'table_name';

【讨论】:

【参考方案3】:

你想要这样的东西。

SELECT TABLE_NAME, COLUMN_NAME
  FROM INFORMATION_SCHEMA.COLUMNS
 WHERE TABLE_SCHEMA = DATABASE()
   AND TABLE_NAME = 'whatever'
ORDER BY TABLE_SCHEMA, TABLE_NAME, ORDINAL_POSITION;

mysql INFORMATION_SCHEMA 使用名为 TABLE_SCHEMA 的列来保存每个表的数据库。

【讨论】:

我应该在 DATABASE() 函数中传递数据库名称吗?没有在 DATABASE() 中传递任何内容并将表名代替“whatever”显示零记录。即使将数据库名称放在 DATABASE() 函数中也会给我零记录。

以上是关于如何从 SQL Server 中特定数据库的表中获取所有列名?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 SQL Server 中的表中删除重复行 [重复]

如何从sql server中的表中查询json数组类型列的值?

如何从SQL表中选择特定行并在SQL Server中连接多个表?

如何在 SQL Server 上创建一个数据库角色,其中该角色的用户只能从一个视图中选择,而不能从视图中使用的表中选择?

如何从 SQL Server 中的表中获取行的索引?

如何从 sql server 2008 中具有不同 TaskIds 的表中查找日期?