【发布时间】:2017-02-13 20:12:31
【问题描述】:
我有一个名为 REFERENCES 的表,其中包含几十万行 XML,我想将它们提取为单独的 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
【问题讨论】:
标签: sql sql-server xml tsql