csv 在SSIS中创建包含详细信息行的摘要行

b1payxdu  于 2023-09-28  发布在  其他
关注(0)|答案(1)|浏览(115)

我有一个要求,在CSV文件的顶部添加小摘要。然后,我需要在其正下方显示详细的行数据。
这就是我想制作的东西:

我尝试在SSIS中执行此操作,需要以CSV格式输出。
数据源是SQL Server。
我已经考虑过使用UNIONALL来实现这一点,但我还需要按照第6行在文件中显示列标题。
有什么办法吗?谢谢

hivapdat

hivapdat1#

您很幸运,这是SSIS能够生成混合输出文件的罕见情况。
你有三个,三个!!,这里有不同的选项

选项一

双数据流方法。这里的技巧是创建两个不同的平面文件连接管理器,它们指向磁盘上的同一个物理文件。Header定义将首先执行,并填充前N行,不写入任何标题行。Body定义将包含带有标题行的预期数据。

DFT Header

我们将使用两个数据流来实现这一点。
我有一个生成键/值对的源代码,如

SELECT
*
FROM
(
VALUES ('agent_name', '123456')
,('bordereau_year', '2023')
,('bordereau_month', '1')
)D(ckey,cvalue);

我将平面文件目标配置为覆盖

已使用第一行中的列名配置平面文件连接管理器。

DFT Body

源数据看起来像

SELECT
*
FROM
(
VALUES
(NEWID(), 'ABC',NULL,'B123')
,(NEWID(), 'BCA',NULL,'B234')
)D(uuid,sub_agent_name,broker_reference,policy);

我使用

平面文件目标指定为

运行该包并获得如下输出

agent_name,123456
bordereau_year,2023
bordereau_month,1
uuid,sub_agent_name,broker_reference,policy
{7A769E78-4D08-43E1-9710-799FA9F93A08},ABC,,B123
{D8FA71FB-748A-4FF3-8AA4-902F48F4992B},BCA,,B234

选项二

这将替换第一个数据流,并利用平面文件连接管理器的Header属性。在这里,我创建了一个名为@[User::HeaderData]的变量,并在表达式中使用

"agent_name,123456
bordereau_year,2023
bordereau_month,1"

您不需要使用表达式,但如果它是静态数据,则当您粘贴到Value中时,换行符将被删除。它将保存在表达式中。
如果内容需要是动态的,那么您需要做一些事情来构建它,然后分配给Value属性。
哦,如果你走这条路,你会想要检查身体上的“第一行的列名”。

选项三

该方法是选项1的不同实现。
无论如何获取数据,然后让一个C#任务将数据写入文件。

System.IO.File.WriteAllText("C:\\ssisdata\\output\so_76908880.csv", "Content here");

相关问题