2

我有以下 XML 和代码,可以拉回 AccountNumber 和 Status。我也需要拉回来...

  • MFRRequest 的 ID 属性
  • CaseInformation 节点中的几个元素

我不确定如何获取 ID 属性,我想知道......我可以在同一个查询中获取所有这些信息(来自多个节点)吗?

谢谢!

DECLARE @doc xml
SET @doc =
'<?xml version="1.0" encoding="UTF-8"?>
<p:OrderRequest xmlns:p="http://XXX.Schemas.OrderRequest/2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://XXX.Schemas.OrderRequest/2 OrderRequestV2.xsd ">
  <p:Header>
    <p:SCRARequestCount>0</p:SCRARequestCount>
    <p:MFRRequestCount>1</p:MFRRequestCount>
    <p:FileCreatedAt>2001-12-31T12:00:00</p:FileCreatedAt>
    <p:RequestFileName>p:RequestFileName</p:RequestFileName>
  </p:Header>
  <p:RequestItems>
  <p:MFRRequest id="1" priority="">
      <p:AccountNumber>9999999</p:AccountNumber>
      <Status>Initial</Status>
      <p:CaseInformation>
       <ReferralDate>2011-01-01</ReferralDate>
       <LoanType>1A</LoanType>
       <ARM>Yes</ARM>
        <InvestorNumber>InvestorNumber</InvestorNumber>
        <PropertyAddress>PropertyAddress</PropertyAddress>
        <PrivateLabel>Yes</PrivateLabel>
        <CaseNumber>01-11111/AK/</CaseNumber>
        <SuspenseBalance>9999.00</SuspenseBalance>
        <TitleOrderedDate>2011-09-01</TitleOrderedDate>
        <TotalMonthlyPayment>876.99</TotalMonthlyPayment>
      </p:CaseInformation>
    </p:MFRRequest>
  </p:RequestItems>
</p:OrderRequest>'
;WITH XMLNAMESPACES('http://XXX.Schemas.OrderRequest/2' AS p) 

SELECT     
 Y.i.value('Status[1]', 'varchar(10)') AS Status ,
 Y.i.value('p:AccountNumber[1]', 'varchar(10)') AS AccountNumber
FROM      @doc.nodes('/p:OrderRequest/p:RequestItems/p:MFRRequest') AS Y(i) 
4

1 回答 1

2

尝试这样的事情:

;WITH XMLNAMESPACES('http://XXX.Schemas.OrderRequest/2' AS p)
SELECT 
    MFRRequestID = Y.i.value('(@id)[1]', 'int'),
    RequestStatus = Y.i.value('Status[1]', 'varchar(10)') ,
    AccountNumber = Y.i.value('p:AccountNumber[1]', 'varchar(10)'),
    ReferralDate = CIF.value('(ReferralDate)[1]', 'varchar(25)'),
    CaseInfoType = CIF.value('(Type)[1]', 'varchar(25)')
FROM 
    @doc.nodes('/p:OrderRequest/p:RequestItems/p:MFRRequest') AS Y(i)
CROSS APPLY
    i.nodes('p:CaseInformation') AS Tbl(CIF)

基本上,一旦您的伪表中有<p:MFRRequest>XML 元素,您就可以再次使用第二个调用来获取(可能是多个)节点,并使用对这个新的第二个伪表的调用来从中提取单个信息位。Y(i).nodes()<p:CaseInfomration>.value()

于 2012-07-26T17:57:21.160 回答