返回特定于每列的多个表

时间:2018-12-04 23:29:30

标签: sql sql-server tsql

我想获得一个更简单的查询,该查询遍历表的所有列,并为EACH列返回相同数目的表。

例如...

select distinct a from tbl;
select distinct b from tbl;
select distinct c from tbl;
select distinct d from tbl;

如果一次运行将返回四个表。这给出了我想要的结果,但是我必须键入每列,如果我有很多列,尤其会令人讨厌。我该如何编写一个查询,遍历所有列并获得相同的结果,而不必执行此操作?

1 个答案:

答案 0 :(得分:4)

根据我们在评论中的对话,您很高兴使用动态TSQL,并且有权在服务器上执行它。

因此,一种方法是使用游标枚举列,然后执行一些动态的TSQL来获取每一列的结果集。

以下示例显示了如何完成此操作。只需将@table修改为所需表的名称,它将每列输出为单个结果集:

DECLARE @column VARCHAR(100)
DECLARE @s VARCHAR(200)
DECLARE @table VARCHAR(50)
SET @table = 'tbl'

DECLARE curRead CURSOR FORWARD_ONLY READ_ONLY
  FOR
    SELECT COLUMN_NAME
    FROM INFORMATION_SCHEMA.COLUMNS
    WHERE TABLE_NAME = @table

OPEN curRead
FETCH NEXT FROM curRead INTO @column  

WHILE @@FETCH_STATUS = 0  
BEGIN  
    SET @s = 'SELECT ' + @column + ' FROM ' + @table
    EXEC(@s)

    FETCH NEXT FROM curRead INTO @column 
END 
CLOSE curRead  
DEALLOCATE curRead

在这种情况下,CURSOR会枚举属于您的表的所有列。

然后,您遍历所有这些,将列名(从COLUMN_NAME存储在变量@column中),构建一段动态SQL(是@s),然后执行它。 / p>