У меня есть таблица с именем REFERENCES
, которая содержит несколько сотен тысяч строк XML, которые я хотел бы извлечь как отдельные файлы XML.Экспорт строк столбца XML из таблицы SQL в отдельные файлы
Это примерно отформатирован как таковую:
+--------------+------------------+
| REFERENCE_ID | REFERENCE_XML |
+--------------+------------------+
| 1 | <xml>...</xml> |
| 2 | <xml>...</xml> |
| 3 | <xml>...</xml> |
| 4 | <xml>...</xml> |
| ... | <xml>...</xml> |
| 70000 | <xml>...</xml> |
+--------------+------------------+
Я хотел бы цикл по каждой строке и массового экспорта каждый REFERENCE_XML
столбца и имя его как REFERENCE_ID
.
Мой набор папки вывода будет выглядеть так:
C:\References\1.xml
C:\References\2.xml
C:\References\3.xml
C:\References\4.xml
C:\References\...
C:\References\70000.xml
Я был в состоянии найти грубый запрос, который выполняет операцию для одной статической строки, но я имею трудное время выяснить, лучший способ для создания цикла WHILE
или CURSOR
. Как сделать имя файла и WHERE
предложение динамического цикла для каждой строки таблицы REFERENCES
и экспортировать все XML-файлы в виде отдельных файлов?
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
С несколькими изменениями (в частности, с линией @sqlStr) я смог успешно получить эту работу. Я не счел нужным передавать XML как NVARCHAR. bcp смог обработать XML без каких-либо проблем. Спасибо! – PicoDeGallo