我试着用SQL来建立一个逗号分隔CAT_ID的列表
代码如下:
declare @output varchar(max)
set @output = null;
select @output = COALESCE(@output + ', ', '') + convert(varchar(max),cat_id)
编辑:改变'为空,依然相同。 但输出即时得到是像这样:
, 66 , 23
领先的逗号不应该存在。 什么我错过了?
我试着用SQL来建立一个逗号分隔CAT_ID的列表
代码如下:
declare @output varchar(max)
set @output = null;
select @output = COALESCE(@output + ', ', '') + convert(varchar(max),cat_id)
编辑:改变'为空,依然相同。 但输出即时得到是像这样:
, 66 , 23
领先的逗号不应该存在。 什么我错过了?
您在SQL 2005? 随着道具罗布·法利谁发现我这个刚刚:
SELECT stuff((
SELECT ', ' + cast(cat_id as varchar(max))
FROM categories
FOR XML PATH('')
), 1, 2, '');
内部查询(用FOR XML PATH('')
选择一个逗号分隔的类ID列表,拥有国内领先“”。 外部查询使用的东西,功能删除前导逗号和空格。
我没有方便的SQL实例来测试这一点,所以它从内存的。 你可能有东西参数等发挥得到它究竟要如何工作。
COALESCE 返回它的参数中的第一个非空表达式
第一个参数@output + ', '
永远不能为null(除非你初始化@output
为NULL,并设置CONCAT_NULL_YIELDS_NULL
至ON
),所以它总是返回。
declare @output varchar(max)
select @output = coalesce
(
@output + ', ' + convert(varchar(max),cat_id),
convert(varchar(max),cat_id)
)
from yourTableHere
print @output
你初始化@output为空字符串? 如果它是一个空字符串COALESCE才会工作。
你在做什么错是@output是不是从开始空,但空字符串。 设置@output为空循环之前(或者,如果它不使用,因为它宣布只是不为空字符串分配给它)。
而有时...
你必须回答自己的问题
declare @output varchar(max)
select @output = case when (@output is null) then '' else ', ' END + convert(varchar(max),cat_id)
检查@output
只是这个查询的执行前值,我认为这不是等于NULL
,但为“”(空字符串)
编辑:(在@auth后编辑的问题)
现在我敢肯定它的“”,
你必须把它初始化为NULL
独立做的CONCAT_NULL_YIELDS_NULL
,使用旧的CASE WHEN
:
select @output = NULL
select @output = CASE WHEN @output IS NULL THEN '' ELSE @output+', ' END + value
不知道这究竟适用于你在寻找什么,但我发现这种权利的同时,我发现你的问题。 我用FOR XML PATH第二溶液,将其马特汉密尔顿如上所述。 这对我来说真是棒极了。
串联行-卡尔P.安德森2009/10/14
http://www.sqlservercentral.com/articles/T-SQL/67973/
/osp/install/idp/bin/sqlminus "select ri || ',' ||name|| ',' || numports || ',' || ascii(OVRONSET) from sdfctigw.ivrgrp where GRP_BEP is not null;" | sort -h
1,COMO INTERNAL 2,700,90
7,LOADIVR,10,80
10,SPEECH_IVR_PROD,600,95