从sql表中获取数据和列名

时间:2014-08-27 12:43:21

标签: sql sql-server

我知道如何从表中获取列名

SELECT Column_name
from Information_schema.columns 
where Table_name like 'summary'

我知道如何获取如下数据

SELECT * FROM [summary] where Id='12345";

但是我如何将这些结合起来以便即使没有数据我至少获取表的列名?

提前致谢。

修改__________________________________________________________

table  
id    name
123    test
12345   test2
在我运行此组合查询后的上述示例中,我希望结果为

id  12345
name test2

但如果我使用像“hello”

这样的id运行查询

然后结果应为

id
name

4 个答案:

答案 0 :(得分:0)

首次查询使用确切的列名来查找

SELECT Column_name
FROM Information_schema.columns 
WHERE Table_name LIKE 'Columns'

第二次查询:

SELECT * FROM [summary] WHERE Id='12345";

联合所有这两个查询:

SELECT Column_name
FROM Information_schema.columns 
WHERE Table_name LIKE 'IND'

UNION ALL

SELECT * FROM [summary] WHERE Id='12345";

答案 1 :(得分:0)

执行t-sql Select语句时返回的列取决于您的Select语句,列中的数据不会影响从select语句返回的数字列。

SELECT Column1 , Column2 , Column3  --<-- COlumn names 
FROM Table_Name  

在上面的查询中,无论列Column1,Column2和Column3中存在哪些数据,查询都将返回所有三列。

所以你假设查询应该返回一个列,即使没有数据也是错误的。

您可以在上面提到的语句中明确使用要返回的select语句中的列名,或者可以使用*而不是使用列名来返回列表中的所有列该表,无论是否存在任何数据。

SELECT *
FROM Table_Name

答案 2 :(得分:0)

如果你想在没有数据时使用表的列名,那么你就像这样使用

IF EXISTS(SELECT * FROM [summary] where Id='12345') 
BEGIN
    SELECT * FROM [summary] where Id='12345'
END  
ELSE
BEGIN
    SELECT Column_name
    FROM   Information_schema.columns 
    WHERE  Table_name like 'summary'
END

答案 3 :(得分:0)

我认为在这里使用简单的CASE就足够了:

SELECT 
   case when id is null then '' else id end ,  
   case when name is null then '' else name end
FROM [summary] where Id='hello';