2013-02-03 95 views
1

在SQL Server 2005中,我試圖在下面的XML格式中解析以下格式的細節,但我無法做到這一點。感謝任何幫助。 我想我的選擇輸出像在SQL Server 2005中解析XML

1 TagSold Tag  0 101 2 
2 TagReg Customer 101 0 4 
3 TagAdj Tag  0 105 2 



<TagDistributor> 
<stbLedgerEntryTypes> 
    <stbLedgerEntryType type="TagSold"> 
     <vcMapping>Tag</vcMapping> 
     <tiCustTrxnTypeID>0</tiCustTrxnTypeID> 
     <tiTagTrxnTypeID>101</tiTagTrxnTypeID> 
     <tiPaymentTypeID>2</tiPaymentTypeID> 
    </stbLedgerEntryType> 
    <stbLedgerEntryType type="TagReg"> 
     <vcMapping>Customer</vcMapping> 
     <tiCustTrxnTypeID>101</tiCustTrxnTypeID> 
     <tiTagTrxnTypeID>0</tiTagTrxnTypeID> 
     <tiPaymentTypeID>4</tiPaymentTypeID> 
    </stbLedgerEntryType> 
    <stbLedgerEntryType type="TagAdj"> 
     <vcMapping>Tag</vcMapping> 
     <tiCustTrxnTypeID>0</tiCustTrxnTypeID> 
     <tiTagTrxnTypeID>105</tiTagTrxnTypeID> 
     <tiPaymentTypeID>2</tiPaymentTypeID> 
    </stbLedgerEntryType> 
</stbLedgerEntryTypes></TagDistributor> 

我試過下面這個。我得到了輸出。但在第一列中,我沒有得到屬性值來區分。我有疑問在第一線。

SELECT 
     a.b.query('.').value('@type', 'varchar(128)'), 
     a.b.query('vcMapping').value('.', 'varchar(128)'), 
     a.b.query('tiCustTrxnTypeID').value('.', 'int'), 
     a.b.query('tiTagTrxnTypeID').value('.', 'int'), 
     a.b.query('tiPaymentTypeID').value('.', 'int') 
FROM @ipv_xmlDistributorInfo.nodes('TagDistributor/stbLedgerEntryTypes/stbLedgerEntryType') a(b) 

回答

1

像這樣的東西應該工作:

SELECT 
    x.value('(@type)[1]', 'varchar(100)') AS 'Type', 
    x.value('(vcMapping)[1]', 'varchar(100)') AS 'vcMapping', 
    x.value('(tiCustTrxnTypeID)[1]', 'int') AS 'tiCustTrxnTypeID', 
    x.value('(tiTagTrxnTypeID)[1]', 'int') AS 'tiTagTrxnTypeID', 
    x.value('(tiPaymentTypeID)[1]', 'int') AS 'tiPaymentTypeID' 
FROM XMLTable x 
CROSS APPLY x.myXMLField.nodes('/TagDistributor/stbLedgerEntryTypes/stbLedgerEntryType') 
    n(x) 

這裏是SQL Fiddle

祝你好運。

+0

如果您需要ROW_NUMBER,那麼這應該工作:http://sqlfiddle.com/#!3/3557c/3 – sgeddes

+0

感謝您的幫助 – bayyinah

+0

沒問題!如果有幫助,請接受答案。祝你好運。 – sgeddes