Ssis 基于日期创建/追加平面文件目标。
背景故事: 我有一个将医生人口统计数据加载到系统中的过程。这些数据可以在任何时间和更新之间的任何间隔输入。数据是我们所称的“排除项”,这意味着源文件优先,数据库中不在源文件中的任何医生记录都被标记为“已定义”或不活动 问题: 我需要能够将源数据中的数据输出到平面文件目标中,作为每日报告发送给配套的COBOL系统。源数据在处理之前加载到ETL.PhysicianLoad表中,并且ETL表在每个新的处理事务之前都会被擦除,因此,如果没有输出文件,就不可能保留整整一天的记录 示例:ProcessOutput_10152013.txt 理想情况下,输出文件需要是一个完整的处理过程。也就是说,我想在当天结束之前一直附加到当天的文件中,然后通过电子邮件发送通知,说明该文件已准备好接收。然后,在一天之交之后输入的任何数据都应该放在新创建的文件中 输出应如下所示(无标题) 我在想什么: 我正在考虑使用一个CurrentDate变量来保存当前日期,并将其与一个名为FileName的基于表达式的变量进行比较,该变量将当前mmddyyy连接到“ProcessOutput_uuyyyy.txt”。我的想法是,我应该能够在目标文件夹中找到具有该名称的文件,如果该文件存在,我应该能够对其进行写入。否则我将不得不创建一个新文件。然后,我可以通过表达式将平面文件目标设置为FileName变量Ssis 基于日期创建/追加平面文件目标。,ssis,Ssis,背景故事: 我有一个将医生人口统计数据加载到系统中的过程。这些数据可以在任何时间和更新之间的任何间隔输入。数据是我们所称的“排除项”,这意味着源文件优先,数据库中不在源文件中的任何医生记录都被标记为“已定义”或不活动 问题: 我需要能够将源数据中的数据输出到平面文件目标中,作为每日报告发送给配套的COBOL系统。源数据在处理之前加载到ETL.PhysicianLoad表中,并且ETL表在每个新的处理事务之前都会被擦除,因此,如果没有输出文件,就不可能保留整整一天的记录 示例:ProcessOut
有没有人能找到更好的解决方法,或者我没有看到的解决方案可能会产生的任何问题?我的思维过程是正确的,但有缺陷 下面是我如何解决这个问题的 在尝试使用原始问题中的逻辑构建我的控制/数据流之后,我发现我自己陷入了困境 这让我再次思考,我怎样才能以最简单的方式做到这一点 首先,我是否定义了正确的变量?没有
- 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)