过去几天我一直在网上搜索,遗憾的是找不到我想要的东西。我有一个包含2列的SQL Server 2012表,一个是PurchaseOrder DataType varchar(10),另一个是DataType为XML的Data。目前正在运行存储过程的几小时内,检查一些表的值,然后创建所需XML格式的PurchaseOrder。这已经由我将要发送数据的公司实现并验证。我现在的问题是我想创建一个SSIS包来查看这个表并创建多个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
我所做的是将其添加到游标中,该游标再次起作用,它创建我的文件,使用purchaseorder作为文件名并输出相关信息但不再保持正确的xml格式,它回到看起来像一个没有原始格式的字符串,这是因为我嵌入它在光标?以下是我正在使用的代码
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
答案 0 :(得分:2)
由于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