1
我正在使用Nodes方法将一些XML数据分解到表中,而我只是缺少一个部分。我需要一个特定的XML元素,但是它的备份(原谅我糟糕的语法,处理XML的新问题)来自我正在粉碎的XML。我已经张贴,我希望是所有相关代码:使用节点移动备份XML
XML:
<ToDoList xmlns="----.----.MappingObjects/XmlSchemas/ToDoList.xsd">
<Step>
<StepId>f3ab5132-fcf4-47c4-929f-ab7464d3bcc7</StepId>
<Rank>1</Rank>
<IsComplete>true</IsComplete>
<CompletionDate>2017-04-17T17:12:45Z</CompletionDate>
<CompletionUser>Michael Johnson</CompletionUser>
<Text></Text>
<CalibrationId>3</CalibrationId>
<CalibrationValues>
<Value>
<Standard>1111</Standard>
<UnitOfMeasureName>NewU</UnitOfMeasureName>
<Min>1111</Min>
<Normal>1112</Normal>
<Max>1113</Max>
<BeforeReading>1111</BeforeReading>
<AfterReading>1112</AfterReading>
<DateCalibrated>2017-04-17T17:12:00Z</DateCalibrated>
<FailBefore>false</FailBefore>
<FailAfter>false</FailAfter>
</Value>
<Value>
<Standard>245.000</Standard>
<UnitOfMeasureName>NewU</UnitOfMeasureName>
<Min>245</Min>
<Normal>250</Normal>
<Max>280</Max>
<BeforeReading>245</BeforeReading>
<AfterReading>250</AfterReading>
<DateCalibrated>2017-04-17T17:12:00Z</DateCalibrated>
<FailBefore>false</FailBefore>
<FailAfter>false</FailAfter>
</Value>
</CalibrationValues>
</Step>
</ToDoList>
SQL:
;with XMLNAMESPACES('----.-----.MappingObjects/XmlSchemas/ToDoList.xsd' as NS)
select WOId,
N.Step.value('(NS:Standard)[1]', 'nvarchar(max)') as [Standard],
N.Step.value('(NS:UnitOfMeasureName)[1]','nvarchar(32)') as [UOM],
N.Step.value('(NS:Min)[1]','float') as [Min],
N.Step.value('(NS:Normal)[1]','float') as Normal,
N.Step.value('(NS:Max)[1]','float') as [Max],
N.Step.value('(NS:BeforeReading)[1]','float') as BeforeReading,
N.Step.value('(NS:AfterReading)[1]','float') as AfterReading,
dbo.fn_clr_GetCustomerLocalTimeFromUTC(@CUSTOMERTIMEZONE, N.Step.value('(NS:DateCalibrated)[1]','datetime')) as DateCalibrated,
N.Step.value('(NS:FailBefore)[1]','bit') as FailBefore,
N.Step.value('(NS:FailAfter)[1]','bit') as FailAfter
from tblWorkOrderToDoList WOTD
cross apply Data.nodes('//NS:Value') N(Step)
现有的表返回以下列(简称为简洁起见):
WOId标准计量单位最小值正常值最大值BeforeReading AfterReading DateCalibrated
我想看到的:
WOId CalibrationId标准计量单位最小值正常值最大值BeforeReading AfterReading
其中CalibrationId是(使用XML以上)3每个返回行。
或很可能不切碎两次使用'..'移动up XML树一级:'(../../ NS:CalibrationId)[1]' – har07