在不使用TYPE指令的FOR XML查询中返回无效的XML字符时,SQL SERVER 便会对这些字符进行实体化。
对于XML工具的用户,不需要任何解决办法,因为无论怎样,在数据流中出现无效字符的位置,XML分析器都将失败。常见的无效字符有空格字符。
通过将无效字符转换为转义后的数字实体编码,将含有在XML名称中的无效的字符(例如空格)的SQL
SERVER名称转换成了XML名称。只有两个非字母字符可以出现在XML名称中:冒号(:)和下划线(_)。由于冒号已经保留给命名空间,因此下划线被选作转义符。
下划线字符不需要进行转义,除非其后的字符为x。例如,表名order_details不进行编码。
标识符中的冒号不进行转义,这样FOR XML
查询就可以生成命名空间元素和属性名称。例如,下面的查询将生成其名称中包含冒号的命名空间属性:
SELECT 'namespace-urn' as 'xmlns:namespace',
1 as 'namespace:a'
FOR XML RAW
结果:
建议使用WITH XMLNAMESPACES来添加命名空间。