我正在尝试使用SSIS将查询结果集的XML表示提取到文本文件中。我的查询当前成功提取了我在SSMS中运行时所需的确切XML输出。我已经尝试了一些技巧,我可以在SSIS包中使用这个结果集来创建一个文件。
使用数据流将OLE源移植到Flat文件不起作用,因为XML查询的输出被视为TEXT,SSIS无法将TEXT,NTEXT或IMAGE推送到文件目的地。
我已尝试执行SQL任务以填充用户变量,然后使用脚本任务(使用C#编写)将此用户变量的内容写入文件输出,但用户变量始终为空。我不知道,但我怀疑这是因为XML被视为TEXT或IMAGE而用户变量不处理这个。
查询采用以下形式: 选择 * FROM dataTable WHERE dataTable.FIELD ='Value' FOR XML AUTO,ROOT('RootVal')
生成的数据集是格式良好的XML,但我无法弄清楚如何将它从结果集转换为文件。
对于我来说,在C#4.0中编写一个控制台应用程序是一个相对容易的任务,但是限制要求我至少证明在编写控制台应用程序和调度程序之前无法使用SSIS。
答案 0 :(得分:4)
很抱歉破坏,但有一个SSIS选项:Export Column Transformation。
我使用
定义了一个OLE DB查询SELECT
*
FROM
(
SELECT * FROM dbo.spt_values FOR XML AUTO, ROOT('RootVal')
) D (xml_node)
CROSS APPLY
(
SELECT 'C:\ssisdata\so_xmlExtract.xml'
) F (fileName)
这导致数据流中的1行和2列。然后,我附加了导出列转换并将其与xml_node
作为提取列和fileName
作为文件路径列
大部分截断结果如下
<RootVal>
<dbo.spt_values name="rpc" number="1" type="A " status="0"/>
<dbo.spt_values name="dist" number="8" type="A " status="0"/>
<dbo.spt_values name="deferred" number="8192" type="V " low="0" high="1" status="0"/>
</RootVal>
本Q&amp; A Export Varbinary(max) column with ssis
提供了更详细的答案,有图片答案 1 :(得分:1)
BillInKC的答案是我见过的最好的答案,但SQL可以简化(不需要交叉申请):
SELECT X.*, 'output.xml' AS filename
FROM (SELECT * FROM #t FOR XML PATH('item'), ROOT('itemList')) AS X (xml_node)
它将输出相同的结构:
xml_node filename
-------------------------------------------------- ----------
<itemList><item><num>1000</num></item></itemlist> output.xml
(1 row(s) affected)