use*_*567 6 sql t-sql sql-server sql-server-2008-r2
我有这个问题,
DECLARE @Result XML;
SELECT @Result = ( SELECT PD.*
FROM [ProductDetailedDescriptions] PD
LEFT JOIN [Products] P ON (PD.ProductID= P.ID)
WHERE PD.ProductID = 23
AND P.RetailerID = 1
AND PD.LanguageID = 1
ORDER BY [ORDER]
FOR XML AUTO, ELEMENTS, ROOT('root')
)
Run Code Online (Sandbox Code Playgroud)
这引发了XML parsing: line 1, character 2038, illegal xml character.当我选择时,
SELECT PD.*
FROM [ProductDetailedDescriptions] PD
LEFT JOIN [Products] P ON (PD.ProductID= P.ID)
WHERE PD.ProductID = 23
AND P.RetailerID = 1
AND PD.LanguageID = 1
ORDER BY [ORDER]
FOR XML AUTO, ELEMENTS, ROOT('root')
Run Code Online (Sandbox Code Playgroud)
它显示以下xml,
<root>
..............................................
..............................................
<PD>
<ID>4187</ID>
<ProductID>23</ProductID>
<Header>aa</Header>
<Description>with other</Description>
<Order>7</Order>
<LanguageID>1</LanguageID>
</PD>
Run Code Online (Sandbox Code Playgroud)
注意#x3.在我的应用程序中,它只是一个空间.这是SQL Server的错误吗?
 是XML中的无效字符.
Char :: =#x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]
您的查询可以简化为:
select cast(0x3 as char(1)) col
for xml raw
Run Code Online (Sandbox Code Playgroud)
上述查询的输出是一个包含一行和一列数据类型的表nvarchar(max).
分配给XML变量时会出现错误.
declare @XML xml =
(
select cast(0x3 as char(1)) col
for xml raw
)
Run Code Online (Sandbox Code Playgroud)
消息9420,级别16,状态1,行1 XML解析:第1行,字符16,非法xml字符
或者,当您指定该type指令时,该列将是一个XML列,您会得到更详细的错误.
select cast(0x3 as char(1)) col
for xml raw, type
Run Code Online (Sandbox Code Playgroud)
Msg 6841,Level 16,State 1,Line 1 FOR XML无法序列化节点'col'的数据,因为它包含XML中不允许的字符(0x0003).要使用FOR XML检索此数据,请将其转换为二进制,varbinary或图像数据类型,并使用BINARY BASE64指令.
在生成XML之前,必须删除非法字符.
declare @XML xml =
replace((
select cast(0x3 as char(1)) col
for xml raw
), '', '')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
19759 次 |
| 最近记录: |