Я вообще не знаю OpenXML, но этот FAQ , кажется, имеет ответ. По сути, это потому, что у вас есть элементы в определенном пространстве имен (из-за атрибута xlmns
), поэтому вы должны иметь возможность указывать одно и то же пространство имен в вашем запросе.
Преобразование этого к вашей конкретной проблеме, я думаю, вы хотите:
declare @CrpId int, @i int, @xml xml
set @xml =
'<NewProgressReportResult xmlns="http://myDomain.com/crp">
<CrpId>2160</CrpId>
</NewProgressReportResult>'
set @ns = '<root xmlns:ns="http://myDomain.com/crp"/>
exec sp_xml_preparedocument @i output, @xml, @ns
select
CrpId
from openxml (@i, '[ns:NewProgressReportResult]', 2)
with (
[ns:CrpId] int 'CrpId'
)
exec sp_xml_removedocument @i