SSIS包从Oracle同步到SQL Server时Visual Studio与SSMS运行日期格式不一致
问题根因
这个差异是Visual Studio和SSMS两个执行环境的区域日期解析规则不一致导致的:你当前从Oracle查询返回的creation_date是字符串类型,写入SQL Server时如果目标字段为日期类型,SSIS会触发隐式日期转换,两个环境运行时使用的账户区域格式不同,就会把你输出的DD-MM-YYYY格式字符串按不同规则解析,出现月日反转的问题。
解决方法
方案1(最稳妥,无环境依赖)
直接修改Oracle侧的查询语句,输出ISO 8601标准格式的日期字符串,该格式不受任何区域设置影响,不会出现解析歧义,修改后的查询语句如下:
select record_id, to_char(to_date(creation_Date, 'MM-DD-YYYY HH24:MI:SS'), 'YYYY-MM-DD"T"HH24:MI:SS') creation_date from 你的源表名
方案2(SSIS侧调整)
在SSIS数据流中添加数据转换步骤,将源端输出的字符串类型creation_date强制转换为DT_DBTIMESTAMP类型,手动指定转换使用的日期格式规则,不依赖环境默认配置。
方案3(字符串透传)
如果业务允许目标表creation_date存储为字符串类型,直接关闭日期转换逻辑,Oracle侧输出你需要的DD-MM-YYYY HH24:MI:SS格式字符串,SQL Server目标表对应字段设为NVARCHAR类型,完全跳过日期解析环节即可。
修改后分别在两个环境执行验证,即可确保输出结果一致。
内容的提问来源于stack exchange,提问作者djohnjohn
相关产品推荐
相关产品推荐

