2010-12-09 7 views
1

Meine Sp lesen XML-Datei Daten mit Hilfe von OPENXML in SQL Server.OPENXML - SQL Server

Es gibt ein kleines Problem in diesem. Hier ist XML-Datei Teil

<Name_Address> 
    <name>JCB SALES PVT</name> 
    <address>24, SALAROURIA ARENA ADUGODI</address> 
    <address>HOSUR MAIN ROAD, Honolulu</address> 
    <country>N</country> 
</Name_Address> 

und meine SQL-Abfrage ist

SELECT 
    @address = CONVERT(VARCHAR(150), [TEXT]) 
FROM OPENXML(@idoc,'/Name_Address/address', 0) 
WHERE [text] IS NOT NULL 

In @Adresse ich letzte Adresse Tag-Wert, dh

HOSUR MAIN ROAD, Honolulu 

bin immer Aber es sollte sein

24, SALAROURIA ARENA ADUGODI, HOSUR MAIN ROAD, Honolulu 

Wie kann ich das erreichen?

Hilf mir, führe mich dazu.

Grüße

+0

Was ** Version ** von SQL Server verwenden Sie? –

+0

Ich benutze sql 2000. – Humdum

+0

Gut formulierte Frage, und bei der Beantwortung habe ich etwas gelernt. +1 –

Antwort

2

Ihr Problem nicht speziell auf mit OPENXML zu tun ist.

Ihre Anfrage ...

SELECT CONVERT(VARCHAR(150), [TEXT]) 
FROM OPENXML(@idoc,'/Name_Address/address', 0) 
WHERE [text] IS NOT NULL 

... gibt mehrere Zeilen. Wenn Sie also einer Variablen zuweisen, wird nur die letzte der zurückgegebenen Zeilen benötigt.

Ich habe ein Beispiel eingerichtet, das einen Cursor verwendet, um dies zu durchlaufen. Es enthält Ihr Beispieldokument. Sie können dies direkt in Query Analyzer (2000)/Management Studio (2005+) einfügen und es wird ausgeführt. Sie müssen nur Ihre Kommas und Leerzeichen hinzufügen (ich habe gerade ein Leerzeichen verwendet).

DECLARE @hdoc int 
DECLARE @doc varchar(1000) 
DECLARE @address varchar(150) 
DECLARE @thisaddress varchar(150) 
set @address = '' 
SET @doc =' 
<Name_Address> 
    <name>JCB SALES PVT</name> 
    <address>24, SALAROURIA ARENA ADUGODI</address> 
    <address>HOSUR MAIN ROAD, Honolulu</address> 
    <country>N</country> 
</Name_Address>' 

EXEC sp_xml_preparedocument @hdoc OUTPUT, @doc 

DECLARE addr_cursor CURSOR 
    FOR SELECT CONVERT(VARCHAR(150), [TEXT]) 
    FROM OPENXML(@hdoc,'/Name_Address/address', 0) 
    WHERE [text] IS NOT NULL 

--select @@FETCH_STATUS 
OPEN addr_cursor 
FETCH NEXT FROM addr_cursor INTO @thisaddress 

WHILE @@FETCH_STATUS = 0 
BEGIN 
    set @address = @address+ @thisaddress + ' ' 
    FETCH NEXT FROM addr_cursor INTO @thisaddress 
END 

select @address 

CLOSE addr_cursor 
DEALLOCATE addr_cursor 

exec sp_xml_removedocument @hdoc 
+0

es funktioniert. Wie Sie davon erfahren haben. Was ich wissen möchte Wie kann eine Person ihre Fähigkeiten und Programmierfähigkeiten erhöhen? Wenn Sie mich führen können, der beste Weg zur Selbsthilfe? – Humdum

+0

@Humdum - Können Sie dies als akzeptiert markieren, indem Sie auf das Häkchen klicken. Sehr schwierig, deine Fähigkeits-/Fähigkeitsfrage zu beantworten. Erfahrung und ein neugieriger Geist hilft. Zum Beispiel hatte ich noch nicht einmal von OPENXML auf SQL Server gehört, aber ich habe nachgeschlagen und ein kurzes Beispiel geschrieben. Ich entschied mich zu sehen, was passieren würde, wenn ich eine Auswahl anstelle einer Zuweisung auf Ihrer ursprünglichen Anweisung SELECT @address = .... treffen würde. Das ergab, dass beide Zeilen zurückgegeben wurden, also schloss ich, dass nur die letzte gesetzt wurde. Es gibt viel mehr über Erfahrung, usw. hier auf StackOverflow und http://programmers.stackexchange.com/. –