如何使用for xml子句从xml字符串中读取列值

时间:2013-02-07 07:13:27

标签: sql xml for-xml

在我们的数据库表中,列存储为xml字符串,如下所示。

<DocumentElement>
  <PartInfo>
    <ID>0</ID>
    <PartNo>0</PartNo>
    <SerialNo>1</SerialNo>
    <Parameter>0</Parameter>
    <InstalledDate>2013-01-15T00:00:00+05:30</InstalledDate>
    <InstalledTill>2013-01-25T00:00:00+05:30</InstalledTill>
  </PartInfo>
  </DocumentElement>

我想获取此字符串的列值。例如,我必须获得2013-01-15T00:00:00+05列的值Installed Date。如何使用forxml子句获取此内容?

1 个答案:

答案 0 :(得分:0)

假设SQL-Server可以使用以下内容:

DECLARE @T TABLE (X XML);
INSERT @T VALUES ('<DocumentElement>
  <PartInfo>
    <ID>0</ID>
    <PartNo>0</PartNo>
    <SerialNo>1</SerialNo>
    <Parameter>0</Parameter>
    <InstalledDate>2013-01-15T00:00:00+05:30</InstalledDate>
    <InstalledTill>2013-01-25T00:00:00+05:30</InstalledTill>
  </PartInfo>
  </DocumentElement>');

SELECT  InstalledDate = X.value('/DocumentElement[1]/PartInfo[1]/InstalledDate[1]', 'DATETIME')
FROM    @T;

如果PartInfo中有多个DocumentElement个节点,那么您需要使用CROSS APPLY .. nodes来获取所有InstalledDate

SELECT  InstalledDate = PartInfo.value('InstalledDate[1]', 'DATETIME')
FROM    @T
        CROSS APPLY X.nodes('/DocumentElement/PartInfo') p (PartInfo);