FOR XML PATH和字符串连接

Joh*_*mes 6 sql t-sql sql-server-2008

我正在尝试创建一个连接硬编码字符串和使用FOR XML PATH创建的字符串的值.

SUBSTRING(
(SELECT (', ' + [value]) 
 FROM [values]
 FOR XML PATH( '' )
), 3, 1000) +
' text in between my values ' +
SUBSTRING(
(SELECT (', ' + [otherValue]) 
 FROM [otherValues]
 FOR XML PATH( '' )
), 3, 1000)
Run Code Online (Sandbox Code Playgroud)

所以我希望有类似的东西:Value1, Value2, Value3 text in between my values OtherValue1, OtherValue2, OtherValue3但是我得到一个空字符串.

如果我取出子串(包括其中的查询),我得到的值介于罚款之间,如果我只自己添加一个子串块,我就会得到列表字符串.所以我无法解决为什么与子字符串和FOR XML PATH查询串联导致它返回一个空字符串....帮助!

Jon*_*gel 3

您不需要使用 XML 功能来创建您想要的内容列表。它实际上并不是为了实现这一点而构建的:它是为了生成 XML 而构建的。:)

尝试这个。我经常使用这种技术:

DECLARE @myList nvarchar(MAX)

SELECT
    @myList = COALESCE(@myList + ', ', '') + MyColumn
    FROM MyTable;
Run Code Online (Sandbox Code Playgroud)

对于未来的读者,请注意,使用ORDER BY此技术并不能保证这些值最终会在输出中排序;看这里