是否有任何技巧可以阻止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被授权):
http://foosite.com/pics4/ImageStore.dll?id=7E92BA08829F6847&raw=1&rev=0
我想要的是这个(&s没有权利):
http://foosite.com/pics4/ImageStore.dll?id=7E92BA08829F6847&raw=1&rev=0
如何防止SQL服务器将'&'赋值为' &
'?
在某些情况下,某人可能不需要格式良好的XML - 我(也许是原始海报)遇到的是使用For XML Path技术通过递归查询返回单个"子"项的字段列表.有关此技术的更多信息(特别是在"黑盒XML方法"部分中): 在Transact-SQL中连接行值
对于我的情况,看到'H&E'(一种病态染色)转变为'格式良好的XML'真的令人失望.幸运的是,我找到了一个解决方案...以下页面帮助我相对容易地解决了这个问题,并且没有重新设计我的递归查询或在演示级别添加额外的解析(对于这个以及我孩子的其他/未来情况) -rows数据字段包含保留的XML字符):使用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 Server生成的内容是正确的.您期望看到的不是格式良好的XML.原因是该&
字符表示实体引用的开头,例如&
.有关更多信息,请参阅XML规范.
当您的XML解析器从XML解析此字符串时,它将理解&
实体引用并以您想要的形式返回文本.因此,XML文件中的内部格式不应该对您造成问题,除非您使用错误的XML解析器,或尝试手动解析它(在这种情况下,您当前的解析器代码目前在XML方面实际上是错误的规格).