2011-04-12 54 views
1

我试图从一个表中使用“合并”串联多个行值,用逗号分隔并将其列为子查询中的一列。如何在子查询中使用Coalesce进行字符串连接?

沿

Declare @assignTo nvarchar(4000) 

Select 
table1.columnA 
table1.columnB 
(
select @assignTo = Coalesce(@assignTo + ', ', '') + CAST(Name as nvarchar(250)) 
from 
table2  
where 
... 
) 
from table1 
where 

线的东西.....

我不断收到 “附近有语法错误 '='。”

如果我只是试图执行Coalesce函数被调用的子查询,它的'罚款。即

Declare @assignTo nvarchar(4000) 
select @assignTo = Coalesce(@assignTo + ', ', '') + CAST(Name as nvarchar(250)) 
    from 
    table2  
    where 
    ... 
    Select @assignTo 

这很好。所以我的问题是,我如何将它作为子查询包含在内?

非常感谢

PS:这是具体到SQL Server 2000

回答

3

不能它作为一个子查询:你必须将它移动到一个UDF。

在SQL Server 2005中,您可以使用XML PATH技术。但对于SQL Server 2000,你必须有一个单独的标量UDF与表访问和级联

+0

谢谢gbn。就像我怀疑......好吧,有时间升级数据库。 再次感谢 – Liming 2011-04-12 06:06:15

0

据我所知, 如果你喜欢做SubQuery,你可以这样做。 但上面的解决方案是最方便的。

Declare @assignTo nvarchar(4000) 

Select 
table1.columnA 
table1.columnB 
tmp.[c] 
from table1, 
    (
     select @assignTo = Coalesce(@assignTo + ', ', '') + CAST(Name as nvarchar(250)) as [c] 
     from 
     table2  
     where 
     ... 
    ) as tmp 
where 

希望它的作品!

相关问题