有什么技巧可以防止 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 方法”部分):在 Transact-SQL 中连接行值 https://www.simple-talk.com/sql/t-sql-programming/concatenating-row-values-in-transact-sql/
对于我的情况,看到“H&E”(一种病理染色)转变为“格式良好的 XML”真是令人失望。幸运的是,我找到了一个解决方案......下一页帮助我相对轻松地解决了这个问题,并且无需重新架构我的递归查询或在表示级别添加额外的解析(对于这个以及我的孩子的其他/未来情况) -行数据字段包含保留的 XML 字符):使用 FOR XML PATH 处理特殊字符 http://blogs.lobsterpot.com.au/2010/04/15/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;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)