【问题标题】:Updating a date in a work flow of ssis更新 ssis 工作流程中的日期
【发布时间】:2015-01-22 04:40:58
【问题描述】:

首先,我是 SSIS 的新手,我需要帮助解决这个问题。

我得到了下一个工作流程,一切正常,直到我收到与源中的日期相关的错误。错误是这样的:某些日期的年份就像 0001(oracle 源),但这不被 sql server 接受(我无法更改数据库中为该字段建立的类型)。我有下一个工作流程,我正在重定向此错误(图 1):

现在,我需要做这样的事情:

如果日期

所以,我想到了一个像图 2 中的解决方案,使用派生列。但是我不知道如何在 SSIS 中表达 if 条件,或者如果这是处理这个问题的最佳方法,那就更好了。

问候

【问题讨论】:

  • 这是我多年从事生产支持和 SSIS 软件包开发后的个人意见。我尽量不要在数据流中做任何数据。我将 fdata 放入一个数据流中的暂存表中,然后在控制流中我使用执行 SQl 任务来进行清理,然后我使用另一个 datflow 将清理后的数据带到生产表中。当数据中发生奇怪的事情并且多年来一直运行良好的过程中断时,这更容易调试。

标签: date ssis


【解决方案1】:

Integration Services Expression Reference

SSIS 表达式语言与if 最接近的是三元运算符condition?true:false

Condition 是任何产生布尔值、真/假的值。在你的情况下[date] < (DT_DATE)"1900-01-01"

在这里,我将字符串日期 1900-01-01 转换为强类型,以便与我的“日期”字段进行比较。您希望将该类型与数据流中表示的内容对齐,例如:DT_DATE、DT_DBTIMESTAMP 等

true 是条件为真时的值。您将遇到的挑战之一是保持数据类型的一致性。与上述相同的警告,但您可能需要(DT_DATE)"1900-01-01"

false 见上文,但为假条件。这更容易,因为不需要类型转换。 [date]

这样

([date] < (DT_DATE)"1900-01-01") ? (DT_DATE)"1900-01-01" : [date]

【讨论】:

  • 晶莹剔透!它在工作流程中进行了一些修改,效果很好
  • @d2907 请标记为您所说的答案“它工作得很好......”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多