我在列中的表中具有以下xml值。我需要使用SQL查询提取errorCode
值。
我尝试了以下查询,但显示出一个错误:
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<queryCalendarResponse xmlns="http://www.foobar.com/WS">
<queryCalendarReturn>
<errorCode>100</errorCode>
<errorMessage>Success</errorMessage>
</queryCalendarReturn>
</queryCalendarResponse>
</soapenv:Body>
</soapenv:Envelope>
SELECT
CAST(REPLACE(Response, 'utf-8', 'utf-16') AS XML).value('
(/soap:Envelope/soap:Body/queryCalendarResponse/queryCalendarReturn/errorCode)[1]', 'nvarchar(max)'), *
FROM
LogTable
WHERE
ID = 100
我收到此错误:
XQuery [value()]:名称“ soap”不表示名称空间
答案 0 :(得分:0)
我找到了解决方案。我必须将xml名称空间声明添加到我的sql中。所以我这样的最终sql并返回值:
select CAST(REPLACE(Response,'utf-8','utf-16') AS XML).value('
declare namespace ns1="http://schemas.xmlsoap.org/soap/envelope/";
declare namespace ns2="http://www.foobar.com/WS";
(/ns1:Envelope/ns1:Body/ns2:queryCalendarResponse/ns2:queryCalendarReturn/ns2:errorCode)[1]',
'nvarchar(max)'), * from LogTable where ID = 100