Pio*_*r L 7 sql-server datetime ssis sql-server-2008-r2 sql-server-2012
有三个SQL Server:
我正在将大量SSIS包从PROD迁移到NEW_TEST和NEW_PROD服务器.
源数据来自平面文本文件
来源DATE数据的格式为dd/mm/yyyy(即2015年11月5日存储为05/11/2015).
在SSIS中,DATE源列(文本文件)的定义是Unicode字符串(DT_WSTR),目标列(在DB表中)数据类型是DATETIME,因此在从文本文件读取数据并将其写入到文本文件之间进行类型转换.数据库表.
当我在PROD(旧)服务器上运行包时,数据被正确加载.
当我在NEW_TEST服务器上运行相同(但升级到2012)的包时,数据加载也正常.
但是,当我在NEW_PROD服务器上运行包时,数据加载不正确(即05/11/2015加载为2015年5月11日而不是2015年11月5日).因此,似乎NEW_PROD服务器以某种方式使用US(MDY)设置转换UK(DMY)源日期字符串.
花了很多时间试图了解发生了什么,这就是我发现的:
我试图弄清楚如何使用调度程序在NEW_PROD服务器上正确加载数据,而不需要:
使用正确的排序规则重建其主数据库(不切实际 - 数据库太多,数据太多)
在所有SSIS包中的所有日期列上将源数据类型从DT_WSTR更改为DATETIME(它们中的太多以及它们在其他两个服务器上正常工作)
将目标数据类型(在DB表中)从DATETIME更改为VARCHAR(...)
所以,长话短说,我试图了解该过程的哪个元素负责将源字符串解释为日期以及如何使其使用DMY而不是MDY而不管不正确的整理设置.我以为我得到了它但是上面列表中的第7项让我感到困惑.
任何最微弱的暗示?
在处理 SQL Server 2012 中的日期解释问题时,有 4 个地方需要检查:
数据库的排序规则(最初继承自服务器排序规则)
SSIS 语言设置(包级别的 LocaleID 属性)
执行包的用户的区域设置(在执行包的服务器上的操作系统级别)
与执行上下文关联的数据库登录的语言设置(登录的“默认语言”属性)
它们之间可能存在优先级,但我只是将它们全部设置为相同的值,问题现在就消失了。
| 归档时间: |
|
| 查看次数: |
553 次 |
| 最近记录: |