我想获得一个更简单的查询,该查询遍历表的所有列,并为EACH列返回相同数目的表。
例如...
select distinct a from tbl;
select distinct b from tbl;
select distinct c from tbl;
select distinct d from tbl;
如果一次运行将返回四个表。这给出了我想要的结果,但是我必须键入每列,如果我有很多列,尤其会令人讨厌。我该如何编写一个查询,遍历所有列并获得相同的结果,而不必执行此操作?
答案 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>