在SQL Server中解析XML值

时间:2014-04-28 18:07:55

标签: sql sql-server xml tsql parsing

我在SQL Server的表XML_TRANSACTION中的列TRANSACTION中包含以下XML。我正在尝试将FromTo标记内的信息解析为单独的列:

<Transaction Id="1234" Timestamp="2012-04-28T05:02:20" Version="TransactionVersion2" SenderId="abcd" SenderLocId="vxyz">
      <Instance Name="Home" />
      <Messages>
        <Message Id="0" Timestamp="2014-04-28T01:00:46">
          <MessageRequest Name="Movement" Xsd="Movement.xsd" Version="5">
            <Body>
              <Parts>
                <Part PartNumber="11111" Qty="1" PersonUniqueId="A1B2C3" />
              </Parts>
              <Order Number="13579" Uid="01" />
              <Ship Number="1ZW23" Type="Out" />
              <From VendorId="XY1X2" VendorLocId="XY1X2" VendorName="Vendor_Extra" VendorStockRoom="OPEN" CountryCode="US" />
              <To VendorId="XY1X2" VendorLocId="XY1X2" VendorName="Vendor_Extra" VendorStockRoom="CLOSED" CountryCode="US" />
            </Body>
          </MessageRequest>
        </Message>
      </Messages>
    </Transaction>

期望的结果:

From_VendorID || From_VendorLocID || From_VendorName || To_VendorID || To_VendorLocID
--------------++------------------++--------------------------------------------------
XY1X2         || XY1X2            || Vendor_Extra    || XY1X2       || XY1X2

等。

我做了几次尝试,但都没有成功。非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

这应该让你开始:

SELECT 
t.[XML_TRANSACTION].value('(//From/@VendorId)[1]','varchar(20)') as From_VendorID
,t.[XML_TRANSACTION].value('(//From/@VendorLocId)[1]','varchar(20)') as From_VendorLocID 
,t.[XML_TRANSACTION].value('(//To/@VendorLocId)[1]','varchar(20)') as To_VendorLocID 
,t.[XML_TRANSACTION].value('(//To/@VendorLocId)[1]','varchar(20)') as To_VendorLocID 
FROM [CD].[TEST] AS t