ssis - 防止平面文件目标中的重复 header - SSIS

标签 ssis

我需要一些帮助。

我正在从 oledb 源导入 .csv 文件中的一些数据。我不希望 header 在目标中出现两次。如果我取消选中“第一个数据行中的列名”属性,则标题也不会在第一次执行时填充。

截至目前的输出。

Col1,Col2
A,B
Col1,Col2
C,D

如果文件为空,我怎样才能让程序包以这样的方式运行,标题被插入。然后,如果再次执行,则不包括 header ,仅包括数据。

有一个类似的线程,但无法应用解决方案如何使用表达式来获取目标本身的行数。很久以前了,所以我创建了一个新的。

非常感谢您的帮助。

-阿克谢

最佳答案

也许我遗漏了什么,但这对我有用。我没有遇到 ColumnNamesInFirstDataRow 的只读问题

我创建了一个名为 AddHeader 的包级变量,键入 Boolean 并将其设置为 True。我添加了一个名为 FFCM 的平面文件连接管理器,并将其配置为使用 2 列 HeadCount (int)、AddHeader (boolean) 的 CSV 输出。在连接管理器的属性中,我为属性“ColumnNamesInFirstDataRow”添加了一个表达式,并为其分配了一个值 @[User::AddHeader]

enter image description here

我添加了一个脚本任务来测试文件的大小。它具有对变量 AddHeader 的读/写访问权限。然后我使用这个脚本来确定文件是否为空。如果您对“空”的定义是它有一个标题行,那么我会调整 if 检查中的逻辑以匹配该长度。

    public void Main()
    {

        string path = Dts.Connections["FFCM"].ConnectionString;

        System.IO.FileInfo stats = null;
        try
        {
            stats = new System.IO.FileInfo(path);
            // checking length isn't bulletproof based on how the disk is configured
            // but should be good enough
            // http://stackoverflow.com/questions/3750590/get-size-of-file-on-disk
            if (stats != null && stats.Length != 0)
            {
                this.Dts.Variables["AddHeader"].Value = false;
            }
        }
        catch
        {
            // no harm, no foul
        }
        Dts.TaskResult = (int)ScriptResults.Success;
    }

我循环了两次以确保生成追加场景

enter image description here

我删除了我的文件并运行了包,但只有一次 header 。

enter image description here

关于ssis - 防止平面文件目标中的重复 header - SSIS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16384364/

相关文章:

SSIS 中的 Powershell

SSIS 中的 C# 脚本任务

sql-server - SSIS 2012 无法使用项目级连接部署包

SSIS 暂存表 - 每次都可以重建吗?

c# - 在 .net core 3.0 上运行集成服务 SSIS

sql-server - Red Hat Linux 上的 SSIS - 支持吗?

sql - 使用SQL命令的SSIS OLEDB目标

ssis - 如何根据存储过程输出停止包执行?

ssis - 如何在Foreach文件枚举器的FileSpec属性上设置表达式?

ssis - 在 SSIS 中使用日志记录和事件处理程序有什么区别?