2009-08-12 14 views
1

私はXMLの世界で初めてです。 SQL Server 2005でXMLデータ型に問題があります。 XMLパラメータが必要なストアドプロシージャがあります。下記のように、パラメータの値...SQL ServerでXMLからリレーショナルデータを抽出する方法

DECLARE @productIds xml 

SET @productIds = 
    '<ROOT> 
     <AGENTLIST> 
     <AGENT> 
      <HOSTAPPLICATIONRECORDKEY>GRI</HOSTAPPLICATIONRECORDKEY> 
      <BROKERID>02h21a0539</BROKERID> 
      <BROKERSHARE>25</BROKERSHARE> 
      <BROKERSTATE>AK</BROKERSTATE> 
      <CARRIERCODE>GRIC</CARRIERCODE> 
      <PLANCODE>EP02</PLANCODE> 
      <COVERAGECODES> 
       <COVERAGECODE>TL50IM06</COVERAGECODE> 
       <COVERAGECODE>TL50IM10</COVERAGECODE> 
      </COVERAGECODES> 
      <SPLITBROKERID1>2</SPLITBROKERID1> 
      <SPLITBROKERSHARE1>25</SPLITBROKERSHARE1> 
      <SPLITBROKERID2></SPLITBROKERID2> 
      <SPLITBROKERSHARE2>25</SPLITBROKERSHARE2> 
      <SPLITBROKERID3></SPLITBROKERID3> 
      <SPLITBROKERSHARE3>25</SPLITBROKERSHARE3> 
      <APPSIGNEDDATE>7/31/2009</APPSIGNEDDATE> 
     </AGENT> 
     <AGENT> 
      <HOSTAPPLICATIONRECORDKEY>GRI</HOSTAPPLICATIONRECORDKEY> 
      <BROKERID>02h21a0538</BROKERID> 
      <BROKERSHARE>25</BROKERSHARE> 
      <BROKERSTATE>AK</BROKERSTATE> 
      <CARRIERCODE>GRIC</CARRIERCODE> 
      <PLANCODE>EP02</PLANCODE> 
      <COVERAGECODES> 
       <COVERAGECODE>TL50IM07</COVERAGECODE> 
       <COVERAGECODE>TL50IM11</COVERAGECODE> 
      </COVERAGECODES> 
      <SPLITBROKERID1>2</SPLITBROKERID1> 
      <SPLITBROKERSHARE1>25</SPLITBROKERSHARE1> 
      <SPLITBROKERID2></SPLITBROKERID2> 
      <SPLITBROKERSHARE2>25</SPLITBROKERSHARE2> 
      <SPLITBROKERID3></SPLITBROKERID3> 
      <SPLITBROKERSHARE3>25</SPLITBROKERSHARE3> 
      <APPSIGNEDDATE>7/31/2009</APPSIGNEDDATE> 
     </AGENT> 
     </AGENTLIST> 
    </ROOT>' 

ブローカーごとにブローカーIDとそれに対応するカバレッジコード(S)すべてを返す必要があります私のストアドプロシージャが...

すべてのヘルプは次のようになり高く評価しました

+0

これはxmlのようには見えないので、これを早期に学習したいと思うかもしれません。このページはあなたにとって良いスタートになるかもしれません。 http://www.developer.com/db/article.php/3531196 –

+0

マークアップでXMLタグが削除されている可能性があります。 –

答えて

1

これはどのように機能しますか?

SELECT 
    PID.NDS.value('(BROKERID)[1]', 'varchar(50)') AS 'BrokerID', 
    CCS.CC.value('(.)[1]', 'varchar(50)') AS 'CoverageID' 
FROM 
    @productIds.nodes('/ROOT/AGENTLIST/AGENT') AS PID(NDS) 
CROSS APPLY 
    PID.NDS.nodes('COVERAGECODES/COVERAGECODE') AS CCS(CC) 

私は結果を得る:

BrokerID CoverageID 
02h21a0539 TL50IM06 
02h21a0539 TL50IM10 
02h21a0538 TL50IM07 
02h21a0538 TL50IM11 

は、あなたが探しているものということです?

SQL Server 2005以降のこのXML「トリッキー」のベストイントロは、Alex Homerのこの記事「SQL Server 2005 XQuery and XML-DML」に記載されています。

Marc

関連する問題