Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 在派生列中嵌套IF-ELSE_Sql Server_Ssis_Expression_Etl_Derived Column - Fatal编程技术网

Sql server 在派生列中嵌套IF-ELSE

Sql server 在派生列中嵌套IF-ELSE,sql-server,ssis,expression,etl,derived-column,Sql Server,Ssis,Expression,Etl,Derived Column,我使用以下逻辑将日期存储在BIU StartDate中,如下所示: 如果updateDate不为空,则BI\u StartDate=UpddatedDate 如果EntryDate为空,则ELSEBI_StartDate接受EntryDate值 然后biu StartDate=CreatedDate 如果CreatedDate为空,则BI\u StartDate=GetDATE() 我使用的是派生列,如下所示: ISNULL(UpdatedDateODS) ? EntryDateODS :

我使用以下逻辑将日期存储在BIU StartDate中,如下所示:

  • 如果
    updateDate
    不为空,则
    BI\u StartDate=UpddatedDate
  • 如果
    EntryDate
    为空,则ELSE
    BI_StartDate
    接受
    EntryDate
    值 然后
    biu StartDate=CreatedDate
  • 如果
    CreatedDate
    为空,则
    BI\u StartDate=GetDATE()
我使用的是派生列,如下所示:

ISNULL(UpdatedDateODS)  ? EntryDateODS : (ISNULL(EntryDateODS) ? CreatedDateODS :
(ISNULL(CreatedDateODS) ? GETDATE()  ))
我得到这个错误:

表达式“ISNULL(UpdateDateOds)?EntryDateODS: (ISNULL(EntryDateODS)?CreatedDataOds:(ISNULL(CreatedDataOds)? GETDATE())“on”派生列。输出[派生列 输出].Columns[派生列1]”无效


您正在查找第一个非空值,它是SSIS数据流(派生列)中不存在的合并

我建议使用一个非常简单的脚本组件:

Row.BIStartDate = Row.UpdateDate ?? Row.EntryDate ?? Row.CreatedDate ?? DateTime.Now;
这是输入列屏幕:

这是输入和输出:

然后将上述代码添加到行处理部分:

public override void Input0_ProcessInputRow(Input0Buffer Row)
    {
        /*
         * Add your code here
         */

        Row.BIStartDate = Row.UpdateDate ?? Row.EntryDate ?? Row.CreatedDate ?? DateTime.Now;
}

从语法角度来看,嵌套的if-else条件写得不好,因为您必须确保所有可能的输出都应该具有相同的数据类型,而且您没有提到最后一个“else”条件:

ISNULL(UpdatedDateODS)  ? EntryDateODS : (ISNULL(EntryDateODS) ? CreatedDateODS :
(ISNULL(CreatedDateODS) ? GETDATE() : **<missing>** ))
如上所述,如果
UpdatedDateODS
EntryDateODS
CreatedDateODS
GETDATE()
没有相同的数据类型,则应转换为统一的数据类型,例如:

ISNULL(UpdatedDateODS)  ? (DT_DATE)UpdatedDateODS : (ISNULL(EntryDateODS) ? (DT_DATE)EntryDateODS :
(ISNULL(CreatedDateODS) ? (DT_DATE)CreatedDateODS : (DT_DATE)GETDATE()  ))

我如何使用脚本组件实现它?如果您等待大约10分钟,我将有屏幕截图。我将提前等待谢谢您。你能解释一下为什么不能使用派生列吗?如果你还没有写完答案,你就不应该把它贴出来/@答案是一样的。现在有关于如何做的截图。
biu StartDate
是否表示“干预日期”?
ISNULL(UpdatedDateODS)  ? (DT_DATE)UpdatedDateODS : (ISNULL(EntryDateODS) ? (DT_DATE)EntryDateODS :
(ISNULL(CreatedDateODS) ? (DT_DATE)CreatedDateODS : (DT_DATE)GETDATE()  ))