2017-10-11 1 views
0

Ich bin beauftragt worden, SQL-Daten in XML zu exportieren. Ich muss alle Leute, die an jeder Datei gearbeitet haben, zusammen mit ihrer E-Mail-Adresse ziehen, sie alle zusammenführen und ihnen eine ID zuweisen. Ich habe nur die Zeilennummer als ID verwendet - es spielt keine Rolle, ob sie sich ändern, sie müssen nur konsistent sein, wenn wir diese XML-Datei hochladen.SQL-Ergebnis zu "normalisiert" XML

Mit diesen addressid s müssen wir den Verantwortlichen in jeder Datei durch die entsprechenden IDs ersetzen.

Das Endergebnis würde wie folgt aussehen:

<Addresses> 
    <Address Name="SomeName" Email= "SomeEmail" Addressid="SomeID"/> 
</Addresses> 
<Files> 
    <File party1id="2" Party2ID="3" Party3ID="6" /> 
</Files> 

Ich habe die Adresstabelle arbeiten, aber ich habe Schwierigkeiten, für jede Partei alle IDs ziehen. Es ist keine praktikable Lösung, sich mehrfach an diesem Tisch zu beteiligen.

Hat jemand einen besseren Weg, wie man das macht?

+0

Bitte Beispieldaten Ihrer Tabellen auch -HTH bieten;). –

Antwort

0

denke ich, Sie eine Abfrage wie folgt verwendet werden:

;with t as (
    select *, 
     row_number() over (partition by Addressid order by partyId) rn 
    from party 
) 
select (
    select 
     [Name] 'Address/@Name', 
     Email 'Address/@Email', 
     Addressid 'Address/@Addressid' 
    from Addresses 
    for xml path('Addresses')) + 
    '<Files><File ' + replace((
    select 'Party'+cast(rn as varchar(5))+'ID='''+cast(partyId as varchar(5))+''' ' 
    from t 
    where Addresses.Addressid = t.Addressid 
    for xml path('') 
    ),'''', '"') + '/></Files>' 
from Addresses; 

SQL Fiddle Demo
oder

select 
    [Name] 'Addresses/Addresse/@Name', 
    Email 'Addresses/Addresse/@Email', 
    Addressid 'Addresses/Addresse/@Addressid', 
    party1id 'Files/File/@party1id', 
    Party2ID 'Files/File/@Party2ID', 
    Party3ID 'Files/File/@Party3ID' 
from 
    t 
for xml path(''); 

SQL Fiddle Demo

Verwandte Themen