【问题标题】:SSIS getdate into DateTimeOffset column - data value overflowed the typeSSIS getdate进入DateTimeOffset列 - 数据值溢出类型
【发布时间】:2012-03-14 14:47:47
【问题描述】:

我有一个 SSIS 包。源是一个 SQL 查询。目的地是一张桌子。该包一直有效,直到我将目标表中的列从 datetime 更改为 datetimeoffset(0)。

现在,所有记录都失败,并在此特定列上显示“转换失败,因为数据值溢出了提供程序使用的类型”错误。

源查询中的值是 getdate()。我试过 TODATETIMEOFFSET(getdate(),'-05:00') 没有成功。

事实上,到目前为止唯一有效的是将以下内容硬编码到源查询中:

cast('3/14/12' as datetime)

另一条有趣的信息是,当针对另一台服务器运行源查询时,该程序包运行良好,这意味着可能涉及到一个设置 - 但我发现两台服务器之间没有明显差异。

【问题讨论】:

  • 我遇到了类似的问题,我发现执行此处列出的操作会有所帮助:social.msdn.microsoft.com/Forums/en/sqlintegrationservices/…。我制作了一个明确的格式以在派生列中使用。很痛苦,但似乎在 SSIS 中使用 dateTime 元素发生了一些奇怪的事情。
  • 数据流中列的数据类型是什么?右键单击源查询的路径并选择元数据

标签: sql sql-server ssis datetimeoffset


【解决方案1】:

我本来建议添加一个“数据转换组件”来处理它,但是由于您仅在目标上进行了更改,这意味着您可以更改源查询来执行:

select cast(YOUR_DATE_COLUMN as datetimeoffset(0))

【讨论】:

  • 我们最终解决了这个问题。我发现 getdate() 的源精度太高 - 如果我用毫秒硬编码一个值,它也会失败。仍然不确定为什么旧方法在一台服务器上运行而不是在另一台服务器上运行 - 但将其显式转换为 datetimeoffset(0) 有效。
【解决方案2】:

如果其他人正在寻找,我们找到了一个替代解决方案,如果源是 SQL 2005(不支持 datetimeoffset)。

select dateAdd(minute,datediff(minute,0,getutcdate()),0)

目的是降低精度。当然,我也失去了几秒钟,但如果我用几秒钟尝试上面的行,我会得到一个溢出错误。

【讨论】:

    猜你喜欢
    • 2019-06-15
    • 2010-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-13
    • 1970-01-01
    • 2011-02-09
    相关资源
    最近更新 更多