SSIS避免手动更改派生列expression式

我有一个SSIS包,需要运行每周的第一天,源是从Excel文件,目标是SQL表。

目前的过程是手动将空值replace为0的excel文件(这需要很多时间),所以我创build了一个包,并且正在使用派生列expression式“(Column1 ==”“?0:Column1) “,但excel文件列并不总是相同的派生列expression式,所以每次我必须运行包,我也必须编辑派生列expression式。 我正在寻找一个更好的方法来做到这一点,并避免手动。 提前致谢。

没有简单的内置方法来处理SSIS中的dynamic列名,更不要担心派生列转换中的expression式。

使用BiMLdynamic创buildSSIS包,该包将根据当前列名导入文件。

Google BiML Tutorial开始学习BiML,祝你好运。

如果无法让每周创buildExcel文件的人让他们命名“星期一”,“星期二”,“星期三”,“星期四”和“星期五”五个列,而不是“20151005”, “20151006”,“20151007”,“20151008”和“20151009”(例如上周申请的),可以通过以下步骤来完成。

脚步:

  1. 在你的SSIS包中创build一个新的全局用户variablesstringtypes,并把它称为“Day”。
  2. 在派生列expression式中,用新的用户variablesreplace“20151005”。 你可以从上面拖拽它,它会看起来像@ [user :: Day]。
  3. 现在要dynamic地填充新的variables“Day”,添加一个SQL脚本,该脚本运行下面的SQL,并使用单行的ResultSet。 在左侧的结果集中,在variables名称列下添加用户variables“日”。 给结果名称的值为“0”。 在“常规”下,将“源types”设置为“直接input”,并提供以下SQL,它将以yyyymmdd格式返回前一周星期一的date值。

     declare @date as datetime set @date = dateadd(week, datediff(week, 0, getdate()-7), 0) select cast(year(@date) as char(4)) + right('00' + convert(varchar(2), month(@date)), 2) + right('00' + convert(varchar(2), day(@date)), 2) 

这里的关键是你可以在下一周的任何一天运行SSIS包,它将捕获前一周星期一的这些信息。 但如果你跳过一个星期,它将会寻找一个不再存在的列。 应用SQL脚本捕获星期一的上周date的替代方法是直接从工作表中读取第一列,这变得很复杂,因为它涉及使用Visual Basic或C#的脚本任务,而不是Excel参考。 更多的参与,但可以做到。

希望这可以帮助。