.net - 在不使用 FOR XML PATH 的情况下将多个结果行连接成单个结果

标签 .net sql-server

我继承了一个存储过程,该存储过程在子选择中使用 FOR XML PATH 将子选择中的多个结果行连接到“主”查询上的单个结果列中。请考虑以下情况,其中表“z”是主查询的 FROM 子句的一部分:

SELECT SUBSTRING((SELECT ('; ' + RTRIM(c.SomeField))
FROM a (NOLOCK)
INNER JOIN b (NOLOCK) ON a.aid = b.aid
INNER JOIN c (NOLOCK) ON b.cid = c.cid
WHERE a.zid = z.zid
FOR XML PATH('')), 3, 1000)

如果子选择中有三个结果行,则返回以下内容:

value1; value2; value3

大多数时候,这非常有效。然而,c.SomeField 的几个值(它是一个 varchar)包含特殊的 XML 字符,最常见的是“&”号。因此,当其中一个值包含 & 符号时,我得到以下结果:

value1 & more value1; value2; value3

还有其他方法可以将这些行结果连接在一起吗?如果没有,是否有一种简单的方法可以在.NET 中解码字符串?

最佳答案

来自 MVP Rob Farley :

SELECT SUBSTRING((
  SELECT ('; ' + RTRIM(c.SomeField))
  FROM a (NOLOCK)
  INNER JOIN b (NOLOCK) ON a.aid = b.aid
  INNER JOIN c (NOLOCK) ON b.cid = c.cid
  WHERE a.zid = z.zid
  FOR XML PATH(''), ROOT('xml'), TYPE
).value('/xml[1]','varchar(max)'), 3, 1000)

他指出:

However, if I actually make my FOR XML call return actual well-formed XML, then I can extract the contents out, and it returns the data to me in its original (correct) form.

关于.net - 在不使用 FOR XML PATH 的情况下将多个结果行连接成单个结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3532909/

相关文章:

c# - 文件流写入文件并读取 bfile

c# - Expression-Bodied 属性和简单的 Getter 属性之间的区别

c# - 使用多个 VS 解决方案和多个项目时的 NuGet 策略

c# - 有没有办法在 netTcpBinding 中同时启用 session 和流式传输?

c# - 确定当前环境变量

sql-server - 无法使用广告管理员帐户连接到 Azure SQL Server

sql-server - Excel 源作为查找转换连接

c# - 如何在Dapper中通过一条sql语句传递多条记录进行更新

mysql - 从现有数据生成缺失数据

sql-server - 奇怪的数据库结构