【问题标题】:Data flow task fails at source because of datetime conversion? SSIS 2008由于日期时间转换,数据流任务在源头失败? SSIS 2008
【发布时间】:2017-01-05 14:00:40
【问题描述】:

我以前见过这种类型的错误(例如截断),之前有字符串,但没有日期时间字段。

有一个似乎在源头失败的数据流任务。 OLEDB 数据源是对过程的调用,结果集的列中有一个日期时间字段 GAPPOSTDT。返回值是一个日期时间,该过程返回的结果很好。当我通过数据流任务运行它时,情况并非如此。查看 oledb 源的高级属性,我看到该字段的类型设置为数据库时间戳 [DT_DBTIMESTAMP],这似乎是正确的。

什么可能导致该字段没有被映射?

我试过简单地删除数据流任务并重新创建它。同样的问题。

请参阅下面的错误消息。

错误:0xC020901C 在数据流任务,OLE DB 源 [1]:有一个 输出“OLE DB 源”上的输出列“GAPOSTDT”(61) 出错 输出”(11)。返回的列状态是:“该值不能是 由于潜在的数据丢失而转换。”。错误:0xC0209029 at 数据流任务,OLE DB 源 [1]:SSIS 错误代码 DTS_E_INDUCEDTRANSFORMFAILUREON错误。 “输出列“GAPOSTDT” (61)" 失败,因为发生错误代码 0xC0209072,并且错误行 “输出列“GAPOSTDT”(61)”上的处置指定失败 错误。在指定的指定对象上发生错误 零件。在此之前可能会发布更多错误消息 有关失败的信息。

[更新 #1]
SSIS 2008

所以我将过程输出更改为返回 varchar(10) 而不是 datetime。数据流中的 OLEDB 源现在出现以下错误

错误:数据流任务中的 0xC020901C,OLE DB 源 [1]:输出“OLE DB 源输出”(11) 上的输出列“GAPOSTDT”(61) 出现错误。返回的列状态为:“文本被截断或一个或多个字符在目标代码页中不匹配。”。 错误:数据流任务中的 0xC020902A,OLE DB 源 [1]:“输出列“GAPOSTDT”(61)”失败,因为发生了截断,并且“输出列“GAPOSTDT”(61)”上的截断行处置指定失败截断。指定组件的指定对象发生截断错误。

我现在怀疑数据中有一些“愚蠢”的字符。源系统中使用的排序规则是 SQL_Latin1_General_CP1_CI_AS

[更新 #2]
好的,我想我可能已经找到了问题所在。在我的程序中,我有一个“虚拟”结果,因为我的程序使用临时表,这是 SSIS 的一种“解决方法”(参见其他主题)。我的最终结果和虚拟结果的列顺序错误。因此,这会将数据放入错误的列中。当我戴上数据查看器时,我注意到了这一点。弹出后,我注意到数据进入了错误的列。奇怪的我想,然后在回顾了我的程序后,我找到了罪魁祸首。

【问题讨论】:

  • 什么版本的 SSIS?这可能无关紧要,但它可以。
  • 查看上面的更新

标签: sql-server ssis


【解决方案1】:

日期时间字段总是存在问题... ;)

尝试在源查询中将此字段转换为字符串,然后应用派生列转换所需的更改。在我住的地方,我们使用日期格式 dd.mm.yyyy,但我得到了至少 3 种其他不同格式的日期...

也许这不是最好的答案,但值得一试……它很适合我……:)

【讨论】:

  • 这至少帮助我获得了一个数据查看器来显示,这让我发现由于在过程中使用了“虚拟”结果,我试图将数据放入错误的列中。虽然导致问题的字段是日期时间,但 oledb 源只会失败。当我返回字符串时,至少有几条记录会得到输出并显示在查看器中。
【解决方案2】:

那是因为输入列的数据类型与目标列不匹配。您提到您在输入 varchar 列之前已经看到,那是因为该列的输入记录的大小(数据长度)小于目标,如果输入是 varchar(30),目标是 varchar(20),那会导致这个问题。检查您的数据类型,我猜当您尝试使用datetimedatetime2datetimeoffset 时可能会有一些冲突

例如:

input varchar(30)   destination varchar(30)  perfectly match
input varchar(20)   destination varchar(30)  fine but a warning
input varchar(30)   destination varchar(20)  if actual is smaller than 20, that is fine, but if bigger than 20, cause error

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-18
    • 1970-01-01
    • 2016-12-26
    相关资源
    最近更新 更多