如何从特定数据库获取表的列名?

时间:2016-12-23 14:43:07

标签: sql-server

我想获取一个表的列名,因为我在下面的查询中使用过,这很好。

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

但是现在我想从特定数据库中获取表的列名,对于同样的我使用下面的查询,但它没有给出任何输出。

例如HS是多个数据库中的数据库名称,G001是我的表名。

在我的情况下,我需要传递数据库名称和表名作为参数。

select COLUMN_NAME 
from INFORMATION_SCHEMA.COLUMNS 
where TABLE_NAME = 'HS..G001'

所以我的问题是如何从特定数据库中获取表的列名?

3 个答案:

答案 0 :(得分:2)

您在要查询的数据库中使用INFORMATION_SCHEMA,例如:

SELECT COLUMN_NAME 
FROM HS.INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME='G001'

如果需要将其作为参数传递,则需要编写一些动态SQL:

DECLARE @database VARCHAR(255) = 'HS'
DECLARE @table VARCHAR(255) = 'G001'

DECLARE @sql VARCHAR(1000) = 'SELECT COLUMN_NAME 
                              FROM ' + @database + '.INFORMATION_SCHEMA.COLUMNS 
                              WHERE TABLE_NAME = ''' + @table + ''''

EXEC(@sql)

注意:像这样的动态SQL可能容易受到SQL注入攻击,因此请确保您对输入进行清理。

答案 1 :(得分:0)

Simplay将数据库名称放在这之前:

select COLUMN_NAME from [<database_name>].INFORMATION_SCHEMA.COLUMNS where TABLE_NAME='G001'

答案 2 :(得分:0)

只需使用:

SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME='HS..G001'
  AND TABLE_SCHEMA='database_name'