SSIS加载SQL Server时间戳变量查询Teradata报无效时间戳错误
SSIS连接Teradata触发-6760无效时间戳报错解决方法
这个报错的核心触发原因不是肉眼可见的时间值格式错误,是SSIS与Teradata ODBC驱动之间的时间类型隐式转换、精度匹配问题,可按以下步骤逐一排查修复:
- 调整SSIS变量的数据类型
不要使用DT_DBTIMESTAMP、字符串类型存储待传入Teradata的时间参数,将变量类型修改为DT_DATE。Teradata ODBC驱动对DT_DATE类型的转换兼容性最好,带毫秒精度的datetime类型在传递时很容易因精度解析偏差触发无效时间戳报错。 - 修改SQL Server端的取值逻辑,截断毫秒精度
你当前查询返回的是带3位毫秒的datetime类型,哪怕显示值为00:00:00.000,SSIS内部存储的精度偏差也可能被驱动识别为非法值,将查询语句修改为如下形式,彻底把时间部分精度归0:
select cast(cast(dateadd(day,1, max(date)) as date) as datetime) DateStart from [table]
- 手动配置ODBC源的参数绑定类型
打开Teradata ODBC源的编辑器,进入参数映射页,不要使用驱动自动识别的参数类型,手动将传入的DateStart参数对应的绑定类型设置为DATE或TIMESTAMP(0),避免驱动自动绑定为Teradata不兼容的高精度TIMESTAMP类型。 - 绕开隐式转换,使用显式类型转换
如果以上操作后仍报错,可以直接将SSIS变量存为YYYY-MM-DD格式的纯日期字符串,在Teradata查询语句中对传入参数做显式转换,彻底绕开驱动的自动类型解析逻辑,示例写法如下:
-- 原查询中直接用?占位传参的写法修改为显式转换 SELECT * FROM tera_target_table WHERE log_time >= CAST(? AS TIMESTAMP(0))
注:-6760 Invalid timestamp是Teradata ODBC驱动的常见已知问题,90%以上的同类场景都是时间精度不匹配、隐式转换失败导致的,优先截断毫秒精度、手动指定参数绑定类型即可解决。
内容的提问来源于stack exchange,提问作者Robert Sacoman
相关产品推荐
相关产品推荐

