【问题标题】:SSIS converts .csv date field to incorrect format on production SQL serverSSIS 在生产 SQL 服务器上将 .csv 日期字段转换为不正确的格式
【发布时间】:2011-07-10 09:28:30
【问题描述】:

我正在使用 SSIS 2005 将 .csv 文件中的数据读取到 SQL Server 2005 数据库中。我对 .csv 使用平面文件连接管理器,对结果行使用 OLEDB 连接管理器。

.csv 文件包含一个字段,该字段是英国格式 (dd/mm/yyyy) 的日期,例如,2011 年 7 月 3 日表示 2011 年 3 月 7 日。然后将此列映射到等价的SQL Server 数据库中的日期时间字段。

我面临的问题是,虽然在开发机器上一切正常,但在生产环境中使用时,插入日期时,日期会更改为美国(mm/dd/yyyy)格式(如果有效)进入 SQL Server。是否可以在某个地方指定目标日期时间字段的所需区域/格式(在本例中为英国),可能是包中的某处或生产服务器本身的某些设置?

提前致谢, 蒂姆

【问题讨论】:

  • 我会检查服务器上的区域设置。我不直接知道这很重要,但我想如果它是为英国/欧洲设置的,日期格式会有所不同。
  • 感谢您的评论。这可能与在生产服务器上运行作业的配置文件有关。我添加了一个脚本组件来将字符串转换为日期并将其插入到日期时间字段中。希望无论区域设置如何,这都能正常工作。

标签: sql-server date ssis format package


【解决方案1】:

您可以在平面文件连接管理器编辑器中设置区域设置,或者在连接的“属性”框中设置 LocaleID(同样的事情)。将其设置为“英语(英国)”将正确解释日期,因为 SSIS 使用包或数据流中的区域设置,而不是操作系统区域设置。

请注意,您必须在源设置格式,而不是在目标设置:日期时间是 MSSQL 中的二进制格式,因此无论如何日期都不会在内部以特定于区域设置的格式存储。

【讨论】:

  • 这将解决它。我发现了同样的问题,并且 SSIS 不会抛出错误或警告,它会将某些日期解释为美国格式,而将某些日期解释为英国格式。解决方法是将包(可能还有包的所有元素)上的语言环境设置为英国。如果你问我,SSIS 中有相当大的错误。
  • 实际上,只需在平面文件连接上为 CSV 设置语言环境即可解决问题。
猜你喜欢
  • 1970-01-01
  • 2014-11-20
  • 2017-05-26
  • 2016-03-08
  • 1970-01-01
  • 2021-06-09
  • 1970-01-01
相关资源
最近更新 更多