Ich habe eine Tabelle namens REFERENCES
, die ein paar hunderttausend Zeilen von XML enthält, die ich als einzelne XML-Dateien extrahieren möchte.XML-Spaltenzeilen von SQL-Tabelle in einzelne Dateien exportieren
Es ist grob als solche formatiert:
+--------------+------------------+
| REFERENCE_ID | REFERENCE_XML |
+--------------+------------------+
| 1 | <xml>...</xml> |
| 2 | <xml>...</xml> |
| 3 | <xml>...</xml> |
| 4 | <xml>...</xml> |
| ... | <xml>...</xml> |
| 70000 | <xml>...</xml> |
+--------------+------------------+
ich es als REFERENCE_ID
jede Zeile durchlaufen und Massenexport jede REFERENCE_XML
Spalte und den Namen möchte.
Mein Ausgabeordner Satz würde als solche aussehen:
C:\References\1.xml
C:\References\2.xml
C:\References\3.xml
C:\References\4.xml
C:\References\...
C:\References\70000.xml
konnte ich eine grobe Abfrage finden, die den Betrieb für eine einzelne statische Zeile durchführt, aber ich bin eine schwierige Zeit, die die beste Art und Weise, herauszufinden, um eine WHILE
Schleife oder CURSOR
zu erstellen. Wie mache ich den Dateinamen und WHERE
Klausel dynamisch, um durch jede Zeile in der REFERENCES
Tabelle durchlaufen und exportieren Sie alle XMLs als einzelne Dateien?
DECLARE @fileName VARCHAR(MAX)
DECLARE @sqlStr VARCHAR(MAX)
DECLARE @sqlCmd VARCHAR(MAX)
SET @fileName = 'C:\References\1.xml' -- I need the integer value to be dynamic per row.
SET @sqlStr = SELECT REFERENCE_XML FROM REFERENCE_DB.dbo.REFERENCES WHERE REFERENCE_ID = 1' -- I need the REFERENCE_ID to be dynamic per row.
SET @sqlCmd = 'bcp "' + @sqlStr + '" queryout ' + @fileName + ' -w -T'
EXEC xp_cmdshell @sqlCmd
Mit ein paar Modifikationen (vor allem an der @sqlStr-Linie) konnte ich erfolgreich arbeiten. Ich fand es nicht notwendig, das XML als NVARCHAR zu interpretieren. bcp konnte das XML ohne Probleme verarbeiten. Vielen Dank! – PicoDeGallo