返回特定于每列的多个表

乔伊

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

例如...

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

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

马丁

根据评论中的对话,您很高兴使用动态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(is @s),然后执行它。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章