是否有任何技巧可以防止 SQL Server 实体化 &、< 和 > 等字符?我试图在我的 XML 文件中输出一个 URL,但 SQL 想要用 '&
'
进行以下查询:
SELECT 'http://foosite.com/' + RTRIM(li.imageStore)
+ '/ImageStore.dll?id=' + RTRIM(li.imageID)
+ '&raw=1&rev=' + RTRIM(li.imageVersion) AS imageUrl
FROM ListingImages li
FOR XML PATH ('image'), ROOT ('images'), TYPE
我得到的输出是这样的(&s 是实体化的):
<images>
<image>
<imageUrl>http://foosite.com/pics4/ImageStore.dll?id=7E92BA08829F6847&raw=1&rev=0</imageUrl>
</image>
</images>
我想要的是这个(&s 未实体化):
<images>
<image>
<imageUrl>http://foosite.com/pics4/ImageStore.dll?id=7E92BA08829F6847&raw=1&rev=0</imageUrl>
</image>
</images>
如何防止 SQL Server 将“&”实体化为“&
”?
最佳答案
在某些情况下,人们可能不想要格式良好的 XML - 我(可能还有原始发帖人)遇到的情况是使用 For XML Path 技术通过递归查询返回“子”项的单个字段列表。有关此技术的更多信息,请参见此处(特别是在“黑盒 XML 方法”部分): Concatenating Row Values in Transact-SQL
就我的情况而言,看到“H&E”(病理染色)转换为“格式良好的 XML”真是令人失望。幸运的是,我找到了一个解决方案......下一页帮助我相对轻松地解决了这个问题,而无需重新构建我的递归查询或在表示级别添加额外的解析(为此以及我 child 的其他/ future 情况) -rows 数据字段包含保留的 XML 字符):Handling Special Characters with FOR XML PATH
编辑:下面引用的博客文章中的代码。
select
stuff(
(select ', <' + name + '>'
from sys.databases
where database_id > 4
order by name
for xml path(''), root('MyString'), type
).value('/MyString[1]','varchar(max)')
, 1, 2, '') as namelist;
关于sql - 在 SQL 2005 上使用 FOR XML PATH 时如何保留与号 (&),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/270948/