我的选择查询返回10行的列表。
我尝试使用COALESCE,但异常抛出“子查询返回的值超过1。当子查询跟随=,!=,<,< =,>,> =或者子查询用作表达式。“
我的查询:
DECLARE @sqlDetails NVARCHAR(MAX);
SET @sqlDetails = COALESCE( @sqlDetails + ' ', '') + ( SELECT
rp.RuleDetails
FROM
RuleBook rb,
RuleException re,
RuleParameters rp
WHERE
rb.RuleBookID = 57 AND
rb.RuleBookID = re.RuleBookID AND
rp.RuleBookID = re.RuleBookID AND
rp.RuleDetails NOT LIKE '%TRIGGER%' AND
rp.RuleDetails NOT LIKE '%EmailTo%');
我需要将返回连接成一行,我该怎么做?
感谢。
答案 0 :(得分:1)
尝试使用STUFF AND FOR XML PATH 看到 How Stuff and 'For Xml Path' work in Sql Server
SET @sqlDetails = STUFF((SELECT ','+RuleDetails FROM RuleBook rb, RuleException re, RuleParameters rp
where rb.RuleBookID = 57 AND rb.RuleBookID = re.RuleBookID AND rp.RuleBookID = re.RuleBookID AND rp.RuleDetails NOT LIKE '%TRIGGER%' AND rp.RuleDetails NOT LIKE '%EmailTo%'FOR XML PATH('')) , 1 , 1 , '' )
答案 1 :(得分:0)
请查看以下查询是否有助于您的要求。
DECLARE @sqlDetails NVARCHAR(MAX);
SET @sqlDetails = COALESCE( @sqlDetails + ' ', '') + ( SELECT
TOP 1 rp.RuleDetails
FROM
RuleBook rb,
RuleException re,
RuleParameters rp
WHERE
rb.RuleBookID = 57 AND
rb.RuleBookID = re.RuleBookID AND
rp.RuleBookID = re.RuleBookID AND
rp.RuleDetails NOT LIKE '%TRIGGER%' AND
rp.RuleDetails NOT LIKE '%EmailTo%');
SELECT @sqlDetails
如果您要求从 SubQuery 中提取所有记录并形成由逗号分隔的字符串,则可以使用以下查询。这与Nelsonrr先前提到过的相似
DECLARE @sqlDetails NVARCHAR(MAX);
SET @sqlDetails =(SELECT @sqlDetails ) + ',' + (SELECT STUFF((SELECT ','+
rp.RuleDetails
FROM
RuleBook rb,
RuleException re,
RuleParameters rp
WHERE
rb.RuleBookID = 57 AND
rb.RuleBookID = re.RuleBookID AND
rp.RuleBookID = re.RuleBookID AND
rp.RuleDetails NOT LIKE '%TRIGGER%' AND
rp.RuleDetails NOT LIKE '%EmailTo%'FOR XML PATH('')) , 1 , 1 , ''));
SELECT @sqlDetails