【问题标题】:SSIS and NULL valuesSSIS 和 NULL 值
【发布时间】:2014-02-11 16:07:05
【问题描述】:

我在 SSIS 中有包。它有一个执行 sql 任务,可以从不同服务器上的表中获取一些配置值。所以 SSIS 包获取这些配置值并将它们存储在 SSIS 的变量中。这些变量在进一步的 sql 任务中用作参数。

我遇到的问题是,其中一些配置值是null。因此,每当 SSIS 遇到整数类型的空值时,它都会将其转换为 0 并将其作为 0 传递给进一步的任务,而不是作为 null 传递它

如果该列的数据类型是日期,并且在配置表中它的值为空,SSIS 会分配一个默认值12/30/1899 12:00:00 AM,并将默认值作为参数而不是null 值传递。

如何让 SSIS 包传递实际的 null 值而不是 SSIS 转换后的值?

【问题讨论】:

    标签: sql-server variables ssis null etl


    【解决方案1】:

    我会将所有变量的数据类型更改为字符串,并更改执行 SQL 任务命令以返回字符串值,例如使用 CAST ... AS NVARCHAR ( 4000 ) )

    字符串变量通常更容易使用。

    【讨论】:

    • 感谢迈克的回复。我观察到,当 SSIS 在 varchar 列中遇到空值时,它会将其转换为空白字符串。我在 SSIS 中没有看到任何可以告诉传递空值而不是将其转换为默认值的设置。
    • 目的是什么? SSIS 变量不能包含空值。也许您需要传递另一个变量,例如Parameter_X_Is_Null,值为 Yes 或 No。
    【解决方案2】:

    如何使用前面提到的字符串,然后在 SQL 任务中尝试 'select isnull([field], 'null')'

    这会将所有空值更改为字符串“null”。

    这是一种很老套的做法,但它可能会奏效。

    【讨论】:

      【解决方案3】:

      有多种选择。其中之一,您需要创建一个表达式,它将您的日期转换为 null 而不是最小日期值(“1899-12-30”)

      这种转换的表达式示例:

      (DT_DATE)( REPORT_DATE ==(DT_DATE)"1899-12-30" ? NULL(DT_DATE) : REPORT_DATE )
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-11-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多