我在DB中有很多行包含XML数据字段。 XML大致如下所示:
<CabasEstimateReply xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="https://cabmb.cab.se/schemas/CABMBGeneralSchemas/CABASEstimateReply/2006-11-16/">
<Estimate xmlns="">
<WorkshopCompanyId>C002006893</WorkshopCompanyId>
<EstimateId>1-SE-AEB965-634921885183891313</EstimateId>
</Estimate>
<EstimateReply xmlns="">
**<EstimateReplyCode>ReplyStatus1</EstimateReplyCode>**
<EstimateReplyVersion>1</EstimateReplyVersion>
<EstimateReplyDate>2013-05-31T11:40:18.6227322+03:00</EstimateReplyDate>
<EstimateReplyComment />
<EstimateReplyMessage>Kunden betalar : 8692 Fakturaadress : Trygg Hansa</EstimateReplyMessage>
<EstimateReplyMessageCompressMethod />
<EstimateReplyReference>010704</EstimateReplyReference>
<EstimateReplyForthcomingInspectionDate />
</EstimateReply>
<Vehicle xmlns="">
<VehicleRegNo>XND108</VehicleRegNo>
<VehicleMake>BMW</VehicleMake>
<VehicleModel>525I TOURING</VehicleModel>
<VehicleModelYear />
<VehicleModelMonth />
<VehicleVINCode />
<VehicleChassiNo>NL51010CM95684</VehicleChassiNo>
<VehicleFirstRegistered>2006-02-23T00:00:00</VehicleFirstRegistered>
<Imported>null</Imported>
</Vehicle>
我需要通过SQL请求获得值EstimateReplyCode(用粗体标记)。我这样做:
;WITH XMLNAMESPACES(DEFAULT 'https://cabmb.cab.se/schemas/CABMBGeneralSchemas/CABASEstimateReply/2006-11-16/')
select [Data],
Data.value('(/CabasEstimateReply/EstimateReply/EstimateReplyCode)[1]', 'nvarchar(64)') AS ReplyCode
from EstimateReplyRawData
但只为ReplyCode获取空值。当我尝试将XML转换为字符串,然后替换命名空间然后转换为XML,一切运行良好,这就是为什么我认为问题是命名空间。我在这里做错了什么?
答案 0 :(得分:2)
如果您确实要忽略名称空间,可以使用名称空间通配符。
select [Data],
Data.value('(/*:CabasEstimateReply/*:EstimateReply/*:EstimateReplyCode)[1]', 'nvarchar(64)') AS ReplyCode
from EstimateReplyRawData