无法在XML语句上运行XMLQuery

时间:2013-10-21 11:14:44

标签: sql-server xml xquery xquery-sql

我在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变量。

感谢

1 个答案:

答案 0 :(得分:2)

字符串的开头和<?xml

之间不能有任何字符

只需删除换行符。

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

Declare @XML as XML = N'<?xml version="1.0" encoding="utf-16"?>....