循环访问XML&读取价值

时间:2017-09-26 09:40:23

标签: sql sql-server sql-server-2008-r2

我有一个SQL查询,可以返回n行。每行都有下面提到的示例XML。我想阅读样本计划ID&插入临时表。 请帮帮我。

请参阅下面的示例XML:

<AvailSampleUpdateRS xmlns="http://www.abcconnect.com/EQC/AR/2007/02">
    <Success>
        <Warning code="1011">Sample date 2016-12-30; Room Type ID 20583; Sample Plan ID 207782211; Inactive Sample Plan Updated Ref=[b44d7e4e-cf66-11e6-950b-e19b2852ebb6] </Warning>
        <Warning code="1022">Sample date 2016-12-31; Room Type ID 20583; Sample Plan ID 207782211; Inactive Sample Plan Updated Ref=[b44d7e4e-cf66-11e6-950b-e19b2852ebb6] </Warning>
        <Warning code="7023">Sample date 2017-01-02; Room Type ID 20583; Sample Plan ID 203619420; Inactive Sample Plan Updated Ref=[b44d7e4e-cf66-11e6-950b-e19b2852ebb6] </Warning>
        <Warning code="1011">Sample date 2017-01-03; Room Type ID 20583; Sample Plan ID 203619420; Inactive Sample Plan Updated Ref=[b44d7e4e-cf66-11e6-950b-e19b2852ebb6] </Warning>
        <Warning code="7025">Sample date 2017-01-04; Room Type ID 20583; Sample Plan ID 203619420; Inactive Sample Plan Updated Ref=[b44d7e4e-cf66-11e6-950b-e19b2852ebb6] </Warning>
    </Success>
</AvailSampleUpdateRS>

谢谢,

1 个答案:

答案 0 :(得分:0)

尝试以下SQL代码。 希望这能帮助你开始。

Declare @xml XML

Set @XML = '<AvailSampleUpdateRS xmlns="http://www.abcconnect.com/EQC/AR/2007/02">
  <Success>
    <Warning code="1011">Sample date 2016-12-30; Room Type ID 20583; Sample Plan ID 207782211; Inactive Sample Plan Updated Ref=[b44d7e4e-cf66-11e6-950b-e19b2852ebb6] </Warning>
    <Warning code="1022">Sample date 2016-12-31; Room Type ID 20583; Sample Plan ID 207782211; Inactive Sample Plan Updated Ref=[b44d7e4e-cf66-11e6-950b-e19b2852ebb6] </Warning>
    <Warning code="7023">Sample date 2017-01-02; Room Type ID 20583; Sample Plan ID 203619420; Inactive Sample Plan Updated Ref=[b44d7e4e-cf66-11e6-950b-e19b2852ebb6] </Warning>
    <Warning code="1011">Sample date 2017-01-03; Room Type ID 20583; Sample Plan ID 203619420; Inactive Sample Plan Updated Ref=[b44d7e4e-cf66-11e6-950b-e19b2852ebb6] </Warning>
    <Warning code="7025">Sample date 2017-01-04; Room Type ID 20583; Sample Plan ID 203619420; Inactive Sample Plan Updated Ref=[b44d7e4e-cf66-11e6-950b-e19b2852ebb6] </Warning>
  </Success>
</AvailSampleUpdateRS>'


SELECT 
    x.y.value('local-name(..)', 'VARCHAR(MAX)') parentElementName,
    x.y.value('local-name(.)', 'VARCHAR(MAX)') elementName,
    x.y.value('.', 'VARCHAR(MAX)') elementValue
    Into #Temp
FROM @xml.nodes('//*[not(*)]') AS x(y)


select SUBSTRING(SUBSTRING(elementValue, CHARINDEX('Sample Plan ID', elementValue), 
CHARINDEX(';', elementValue)+1), PATINDEX('%[0-9]%', 
SUBSTRING(elementValue, CHARINDEX('Sample Plan ID', elementValue), CHARINDEX(';', elementValue)+1)), 
LEN(SUBSTRING(elementValue, CHARINDEX('Sample Plan ID', elementValue), CHARINDEX(';', elementValue)+1))) as SampleDataID
From #Temp