如何在SSIS数据流选项卡中制定条件表达式?

时间:2010-08-21 17:55:14

标签: sql ssis expression casting

我正在开发一个SSIS 2008包,我正在尝试创建一个派生列转换。但是当我转到Expression编辑器并尝试这个表达式时,它给了我很多错误。我尝试过各种各样的差别,但都导致了错误。我需要你们中的一位SQL专家指出一个更好的表达方式!

  

ISNULL(WITHDRAWAL_DATE)|| TRIM(WITHDRAWAL_DATE)== “” NULL:CAST(WITHDRAWAL_DATE   作为日期)

所以我希望将WITHDRAWAL_DATE输入String数据类型与空字符串进行比较 - 如果它是空的我希望它变为空,否则将被转换为日期。

谢谢你的帮助。我感到很困惑! WITHDRAWAL_DATE是源XML文件中的DATE数据类型输入,现在我将其作为我的XSD文件中的STRING数据类型。最终问题是我的XML源数据中的一些Withdrawal_Date字段是空的。所以我想在我的数据库中为这些记录插入Null值。

我需要在XSD,XLST和SQL输出表中指定哪种数据类型?如果我使用数据转换任务或派生列Xform对我来说无关紧要,但由于我是这些人的新手,你能给我发送表达式语法吗?

@BobS:当我使用您更新的解决方案运行时,我收到错误: 将datetime2数据类型转换为日期时间数据类型会导致超出范围的值

因此,当我使用googled datetime2数据类型时,看起来这是一种支持更大时间/日期字段的新数据类型。因此,我修改了我的SQL表以使用DATETIME2代替此字段,并修改了下面的转换表达式以使用DATETIME2,但转换的输出没有相应改变。
我还尝试将所有文​​件的WITHDRAWAL_DATE更改为datetime,然后将SQL表更改为此字段的NOT NULL。但这也给了我错误。

2 个答案:

答案 0 :(得分:3)

我发现您应该使用此衍生列转换解决几个问题。

首先,您无法更改列的数据类型,这是您的表达式尝试执行的操作。我不确定你是否真的想要这样做。但是,如果输出列与输入列相同,则必须更改它。为此,在派生列编辑器中,派生列名称应为新列名称,派生列应为<add as new column>

表达式需要两个更改。要分配NULL值,请使用语法为NULL(data-type)的null函数。并且,CAST函数语法为(DT_datatype)columnname。所以,这就是你的表达式应该是什么样的

ISNULL(WITHDRAWAL_DATE) || TRIM(WITHDRAWAL_DATE) == "" ? NULL(DT_DBTIMESTAMP) : (DT_DBTIMESTAMP)WITHDRAWAL_DATE

更新:您应该可以使用上面的表达式;但是,我确实将其更改为引用DT_DBTIMESTAMP数据类型。 SSIS DT_DBTIMESTAMP数据类型与DATETIME SQL Server数据类型匹配。

要了解您应该为源组件使用哪种数据类型,可以右键单击源组件并选择“显示高级编辑器”...选择“输入和输出”选项卡。导航树视图以查找列并查看关联的数据类型。高级编辑器可用于大多数(可能是所有)数据流组件。

更新2:如果派生列组件的输出数据类型是DT_DBTIMESTAMP2而不是DT_DBTIMESTAMP,请确保更改expresson中的两个DT_DBTIMESTAMP引用。在关闭派生列组件之前,请查看表达式的“数据类型”列。您无法更改它,但它将显示表达式输出的数据类型。如果它不是您想要的,那么您的表达仍然存在问题。

对于源文件,您无法更改外部列的数据类型。至少,我无法做到这一点。在SSIS中,您必须使用Source组件解释的内容。如果你可以改变文件,改变数据类型,那就太好了。然后,使用派生列组件转换所需内容。

答案 1 :(得分:0)

你得到了什么错误?我怀疑其中一个是施法错误。