如何在SQL Server中格式化TSQL SELECT输出

时间:2010-04-18 07:16:01

标签: sql sql-server sql-server-2005 tsql formatting

如何循环选择语句会产生格式化文本? 例如,select就像:

select name from table 

我们想要一个像这样的变量@names:

"name1,name2,name3"

数据库是SQL Server 2005

3 个答案:

答案 0 :(得分:5)

如果表包含多个记录,即:

1, name1, ..
2, name2, ..
3, name3, ..

然后这个查询:

DECLARE @names VARCHAR(MAX)
SELECT @names = COALESCE(@names + ', ', '') + name
FROM table

将产生下一个结果:

name1, name2, name3

请参阅COALESCE on MSDN

答案 1 :(得分:1)

这需要在一个函数中完成。没有快速的方法来做到这一点。通常,您可以在客户端代码中执行此操作。

答案 2 :(得分:1)

如果你计划在每行上创建一个函数来形成另一个查询,那么它将非常慢,因为需要为每一行调用该函数。您应该一次处理数据集,它一次完成所有行。这是如何为另一个查询的每一行连接多个值的示例:

set nocount on;
declare @t table (id int, name varchar(20), x char(1))
insert into @t (id, name, x)
select 1,'test1', 'a' union
select 1,'test1', 'b' union
select 1,'test1', 'c' union
select 2,'test2', 'a' union
select 2,'test2', 'c' union
select 3,'test3', 'b' union
select 3,'test3', 'c' 

SELECT p1.id, p1.name,
          stuff(
                   (SELECT
                        ', ' + x
                        FROM @t p2
                        WHERE p2.id=p1.id
                        ORDER BY name, x
                        FOR XML PATH('') 
                   )
                   ,1,2, ''
               ) AS p3
      FROM @t p1
     GROUP BY 
        id, name

输出:

id          name                 p3
----------- -------------------- -----------
1           test1                a, b, c
2           test2                a, c
3           test3                b, c