我有一个表0123',它包含几十万行XML,我希望将其作为单独的XML文件提取。将SQL表中的XML列行导出到单个文件中
大致是格式化为这样:
+--------------+------------------+
| 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