Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ssis 基于日期创建/追加平面文件目标。_Ssis - Fatal编程技术网

Ssis 基于日期创建/追加平面文件目标。

Ssis 基于日期创建/追加平面文件目标。,ssis,Ssis,背景故事: 我有一个将医生人口统计数据加载到系统中的过程。这些数据可以在任何时间和更新之间的任何间隔输入。数据是我们所称的“排除项”,这意味着源文件优先,数据库中不在源文件中的任何医生记录都被标记为“已定义”或不活动 问题: 我需要能够将源数据中的数据输出到平面文件目标中,作为每日报告发送给配套的COBOL系统。源数据在处理之前加载到ETL.PhysicianLoad表中,并且ETL表在每个新的处理事务之前都会被擦除,因此,如果没有输出文件,就不可能保留整整一天的记录 示例:ProcessOut

背景故事:

我有一个将医生人口统计数据加载到系统中的过程。这些数据可以在任何时间和更新之间的任何间隔输入。数据是我们所称的“排除项”,这意味着源文件优先,数据库中不在源文件中的任何医生记录都被标记为“已定义”或不活动

问题:

我需要能够将源数据中的数据输出到平面文件目标中,作为每日报告发送给配套的COBOL系统。源数据在处理之前加载到ETL.PhysicianLoad表中,并且ETL表在每个新的处理事务之前都会被擦除,因此,如果没有输出文件,就不可能保留整整一天的记录

示例:ProcessOutput_10152013.txt

理想情况下,输出文件需要是一个完整的处理过程。也就是说,我想在当天结束之前一直附加到当天的文件中,然后通过电子邮件发送通知,说明该文件已准备好接收。然后,在一天之交之后输入的任何数据都应该放在新创建的文件中

输出应如下所示(无标题)

我在想什么:

我正在考虑使用一个CurrentDate变量来保存当前日期,并将其与一个名为FileName的基于表达式的变量进行比较,该变量将当前mmddyyy连接到“ProcessOutput_uuyyyy.txt”。我的想法是,我应该能够在目标文件夹中找到具有该名称的文件,如果该文件存在,我应该能够对其进行写入。否则我将不得不创建一个新文件。然后,我可以通过表达式将平面文件目标设置为FileName变量


有没有人能找到更好的解决方法,或者我没有看到的解决方案可能会产生的任何问题?

我的思维过程是正确的,但有缺陷

下面是我如何解决这个问题的

在尝试使用原始问题中的逻辑构建我的控制/数据流之后,我发现我自己陷入了困境

这让我再次思考,我怎样才能以最简单的方式做到这一点 首先,我是否定义了正确的变量?没有

  • CurrentDate-必须在那里定义文件名的日期部分
  • 文件名-由于明显的原因必须存在
我错过了什么

  • FileExists(类型:boolean)-用于标识文件存在的东西
  • 占位符文件(类型:字符串)-通用文件名变量
现在该怎么办

  • 将VB脚本任务添加到控制流,以设置FileExists标志

    'Check to see if ProspectivePhysician_<currentdate>.txt exists.
    Dts.Variables("User::FileExists").Value = File.Exists(Dts.Variables("User::FileName").Value.ToString)
    
    “检查是否存在ProspectiveMedicine_uux.txt。
    Dts.Variables(“User::FileExists”).Value=File.Exists(Dts.Variables(“User::FileName”).Value.ToString)
    
  • 现在我们已经定义了目标文件,从源表创建数据流对象。检查条件拆分中的FileExists变量。将数据流分为两个分支。创建两个名为“现有”和“新”的平面文件目标,将它们暂时设置为相同的平面文件位置

如果此时尝试运行包,您将收到来自两个目标之一的验证错误,因为第一个目标拥有文件的所有权,不允许第二个目标验证文件

如何修复此问题…使用表达式来回交换实际文件名值

  • 对于现有平面文件连接字符串值,请使用以下表达式:

    @[用户::文件存在]==真@[用户::文件名]:@[用户::占位符文件]

  • 对于新的平面文件连接字符串值,请使用以下表达式:

    @[用户::文件存在]==真@[用户::占位符文件]:@[用户::文件名]

  • 最后,右键单击数据流中的每个平面文件目标对象,并在新平面文件目标上将Overwrite属性设置为True,在现有目标上将Overwrite属性设置为False。这将确保对现有文件使用Append操作

'Check to see if ProspectivePhysician_<currentdate>.txt exists.
Dts.Variables("User::FileExists").Value = File.Exists(Dts.Variables("User::FileName").Value.ToString)