0

我昨天有这个 SSIS 包工作,现在我得到了这个错误,一夜之间没有任何变化。

基本上我得到一个字符串,看起来像:yyyymmdd,我需要将它转换为日期数据类型。因此,我采用子字​​符串来获取 yyyy/mm/dd 然后将其转换为日期类型。

路径:

平面文件源 ---> 衍生列 ---> 我所有的 SSIS 包集成/插入任务

以下是表达式:

(DT_DATE)(SUBSTRING([PolicyExpire],1,4) + "/" + SUBSTRING([PolicyExpire],5,6) + "/" + SUBSTRING([PolicyExpire],7,8))
(DT_DATE)(SUBSTRING([BirthDate],1,4) + "/" + SUBSTRING([BirthDate],5,6) + "/" + SUBSTRING([BirthDate],7,8))
(DT_DATE)(SUBSTRING([DLIssueDate],1,4) + "/" + SUBSTRING([DLIssueDate],5,6) + "/" + SUBSTRING([DLIssueDate],7,8))

这是错误:

错误:0xC0049064 将 EXD 数据从平面文件提取到 YD db 1,派生列 [3352]:尝试执行类型转换时出错。

错误:0xC0209029 从平面文件中提取 EXD 数据到 YD db 1,派生列 [3352]:SSIS 错误代码 DTS_E_INDUCEDTRANSFORMFAILUREONERROR。“组件”派生列“(3352)”失败,因为发生错误代码0xC0049064,并且“输入列“PolicyExpire”(3368)上的错误行处置指定错误失败。指定组件的指定对象发生错误。在此之前可能会发布错误消息,其中包含有关失败的更多信息。

错误:0xC0047022 从平面文件中提取 EXD 数据到 YD db 1,SSIS.Pipeline:SSIS 错误代码 DTS_E_PROCESSINPUTFAILED。在处理输入“派生列输入”(3353) 时,组件“派生列”(3352) 上的 ProcessInput 方法失败,错误代码为 0xC0209029。已识别的组件从 ProcessInput 方法返回错误。该错误是特定于组件的,但该错误是致命的,将导致数据流任务停止运行。在此之前可能会发布错误消息,其中包含有关失败的更多信息。

4

3 回答 3

2

您的子字符串参数对于日期的月份和日期部分不正确。

例如,它应该是

SUBSTRING([PolicyExpire], 5,2 )

代替

SUBSTRING([PolicyExpire], 5,6 ) 获取月份值。

substring 函数的第三个参数是要查找的子字符串的LENGTH(在本例中为 2),而不是子字符串的 END POSITION。

试试这个

(DT_DATE)(SUBSTRING([PolicyExpire],1,4) + "/" + SUBSTRING([PolicyExpire],5,2) + "/" + SUBSTRING([PolicyExpire],7,2))

(DT_DATE)(SUBSTRING([BirthDate],1,4) + "/" + SUBSTRING([BirthDate],5,2) + "/" + SUBSTRING([BirthDate],7,2))

(DT_DATE)(SUBSTRING([DLIssueDate],1,4) + "/" + SUBSTRING([DLIssueDate],5,2) + "/"  + SUBSTRING([DLIssueDate],7,2))
于 2012-07-18T23:11:09.807 回答
0

大概您今天尝试导入的数据有所不同。您今天的文本文件数据源是否存在昨天不存在的问题?

于 2011-06-21T16:24:39.797 回答
0

上面的转换没有考虑 NULL。检查 [PolicyExpire] 在其中一条记录中是否具有 NULL 值。

于 2011-06-21T19:19:51.620 回答