1

我在 SQL Server 中遇到 XML 查询问题。我通常对@XML变量运行查询以获取这样的数据,但在某个语句中它不起作用。

此代码正常工作

Declare @XML as XML = 
'
<ResponseData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Remain>12345654321.1234</Remain>
  <ErrorMsg />
</ResponseData>';
;

Select 
    F.value('Remain[1]','decimal(18,4)') as A,
    F.value('ErrorMsg[1]','varchar(100)') as B
FROM  @XML.nodes('ResponseData')Tbl(F);

但是如果我在第一行添加一个新行,@XML则无法解析并返回以下错误

XML 解析:第 2 行,第 6 个字符,text/xmldecl 不在输入的开头

Declare @XML as XML = 
'
<?xml version="1.0" encoding="utf-16"?>
<ResponseData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Remain>12345654321.1234</Remain>
  <ErrorMsg />
</ResponseData>';
;

Select 
    F.value('Remain[1]','decimal(18,4)') as A,
    F.value('ErrorMsg[1]','varchar(100)') as B
FROM  @XML.nodes('ResponseData')Tbl(F);

<?xml version="1.0" encoding="utf-16"?>添加到@XML变量中。

谢谢

4

1 回答 1

2

字符串开头和字符串之间不能有任何字符 <?xml

只需删除换行符。

如果你想使用 utf-16,你需要在字符串前面加上一个N

Declare @XML as XML = N'<?xml version="1.0" encoding="utf-16"?>....
于 2013-10-21T11:17:21.950 回答