将 XML 数据导出到多个文件但保留结构

Exporting XML Data to mutiple files but retain structure

过去几天我一直在网上搜索,很遗憾找不到我要找的东西。我有一个包含 2 列的 SQL Server 2012 table,一列是 PurchaseOrder DataType varchar(10),另一列是数据类型为 XML 的数据。目前存储过程每隔几个小时发生的事情是 运行 检查多个 table 的值,然后以所需的 XML 格式创建 PurchaseOrder。我将向其发送数据的公司已经实现并验证了这一点。我现在遇到的问题是我想创建一个 SSIS 包来查看此 table 并使用数据字段 "not putting the contents in to one long line" 的内容创建多个 xml 文件,然后将 PurchaseOrder 字段用于文件名。我找到了各种零件解决方案,例如使用脚本任务,因为 SSIS 中没有本机 XML 目标,但对 SSIS 来说很困难并且很新,无法快速到达任何地方。任何人都可以提供任何帮助、指导、youtube 链接,甚至部分方式包。

谢谢P

除了上面的问题,我还尝试使用 bcp 命令来解决这个问题,下面是下面的代码,仅查看前 1 条记录就可以很好地工作

DECLARE @fileName VARCHAR(50)

DECLARE @sqlStr VARCHAR(1000)
DECLARE @sqlCmd VARCHAR(1000)

SET @fileName = 'C:\Temp\test.xml'
SET @sqlStr = 'select TOP 1 Data from DatabaseName.dbo.OutputXML'

SET @sqlCmd = 'bcp "' + @sqlStr + '" queryout ' + @fileName + '
-w -T -S Server\Instance'

EXEC xp_cmdshell @sqlCmd

然后我所做的是将它添加到游标中,它再次起作用,它创建我的文件,使用采购订单作为文件名并输出相关信息,但它不再包含正确的 xml 格式,它看起来像一个带有原始格式 none 的字符串,这是因为我将它嵌入到光标中了吗?下面是我正在使用的代码

DECLARE @fileName VARCHAR(50) 
DECLARE @sqlStr VARCHAR(1000)
DECLARE @sqlCmd VARCHAR(1000)

DECLARE xml_cursor CURSOR FOR

SELECT PurchaseOrder from DatabaseName.dbo.OutputXML

OPEN xml_cursor

FETCH NEXT FROM xml_cursor INTO @fileName

WHILE @@FETCH_STATUS = 0 
BEGIN

SET @fileName = 'C:\Temp\'+@fileName+'.xml'
SET @sqlStr = 'select Data from DatabaseName.dbo.OutputXML'

SET @sqlCmd = 'bcp "' + @sqlStr + '" queryout ' + @fileName + ' 
-w -T -S Server\Instance'

EXEC xp_cmdshell @sqlCmd

FETCH NEXT FROM xml_cursor into @fileName

END
CLOSE xml_cursor
DEALLOCATE xml_cursor

由于 bcp 是一个命令行实用程序,它不知道您的光标。您只能更改传递的参数。您已经从游标传递了 @filename,您还需要过滤您的查询。以下是如何解决您的问题,但这远非一个好的解决方案,它会很慢。我不知道你的钥匙叫什么,所以我叫它SomeKey

DECLARE @fileName VARCHAR(50) 
DECLARE @sqlStr VARCHAR(1000)
DECLARE @sqlCmd VARCHAR(1000)
DECLARE @SomeKey VARCHAR(100) --Put your key datatype here 

DECLARE xml_cursor CURSOR FOR

-- replace SomeKey with your key
SELECT SomeKey,PurchaseOrder FROM DatabaseName.dbo.OutputXML

OPEN xml_cursor

FETCH NEXT FROM xml_cursor INTO @SomeKey,@fileName

WHILE @@FETCH_STATUS = 0 
BEGIN

SET @fileName = 'C:\Temp\' + @filename + '.xml'
SET @sqlStr = 'SELECT Data FROM DatabaseName.dbo.OutputXML WHERE SomeKey = ''' + @SomeKey +''''

SET @sqlCmd = 'bcp "' + @sqlStr + '" queryout ' + @fileName + '-w -T -S Server\Instance'

EXEC xp_cmdshell @sqlCmd

FETCH NEXT FROM xml_cursor into @SomeKey,@fileName

END
CLOSE xml_cursor
DEALLOCATE xml_cursor