gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 06:47:42 31 4
gpt4 key购买 nike

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

ISNULL(WITHDRAWAL_DATE)||TRIM(WITHDRAWAL_DATE)==""?NULL:CAST(WITHDRAWAL_DATE AS DATETIME)



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

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

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

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

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

最佳答案

我看到您应该使用此派生列转换解决几个问题。

首先,您不能更改列的数据类型,而这正是您的表达式试图执行的操作。我不确定你是否真的想这样做。但是,如果您的输出列与输入列相同,那么您将不得不更改它。为此,在派生列编辑器中,派生列名称应为新列名,派生列应为 <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 数据类型。

要了解应用于源组件的数据类型,您可以右键单击源组件并选择 Show Advanced Editor... 选择输入和输出选项卡。导航树 View 以查找您的列并查看关联的数据类型。高级编辑器可用于大多数(可能是所有)数据流组件。

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

对于源文件,您不能更改外部列的数据类型。至少,我一直做不到。在 SSIS 中,您必须处理 Source 组件所解释的内容。如果您可以更改文件以更改数据类型,那就太好了。然后,使用派生列组件将提供的内容转换为您需要的内容。

关于sql - 如何在 SSIS 数据流选项卡中制定条件表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3538388/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com