【问题标题】:LoadData from SQL Server 2012 to 2008 R2 issue with date date type loading into datetime datatype column从 SQL Server 2012 到 2008 R2 的 LoadData 问题将日期日期类型加载到日期时间数据类型列中
【发布时间】:2020-12-23 21:54:32
【问题描述】:

我必须将数据从 SQL Server 2012 加载到 SQL Server 20108 R2。我有一个数据类型为date 的列,在目标表中我的数据类型为datetime。当我尝试使用 SSIS 加载数据时,我收到一条错误消息,指出日期格式无效,有时我会遇到对话失败。

Source : 


CREATE TABLE SourceTable(
    [SSNO] [char](9) NOT NULL,
    [SH_CHANGE_DATE] [date] NULL,
    [SH_REASON_CODE] [char](2) NOT NULL,
    [SH_ANN_SALARY] [decimal](8, 2) NOT NULL,
    [GRADE] [char](2) NOT NULL,
    [ITEM] [char](4) NOT NULL,
    [MULTI_POSITNBR] [char](4) NOT NULL,
    [STEP] [char](2) NOT NULL,
    [OFF_STEP] [char](1) NOT NULL,
    [SH_TITLE_NAME] [char](30) NOT NULL,
    [SH_CHANGE_AMT] [decimal](7, 2) NOT NULL,
    [SH_DIV_DIST_IND] [char](4) NOT NULL,
    [SH_BUDGET] [char](3) NOT NULL,
    [SH_ENGNO] [char](2) NOT NULL,
    [SH_RCDADD_DATE] [date] NULL,
    [SH_RCDADD_TIME] [time](0) NULL,
    [SH_OCC_CATEGORY] [char](1) NOT NULL,
    [SH_FULL_PART_CD] [char](1) NOT NULL,
    [SH_SUPVY_CLASS] [char](1) NOT NULL,
    [EMPLOYEE_NUMBER] [char](9) NOT NULL,
    [T101_TSAL_HIST_PRIMARY_KEY]  AS ((substring([SSNO],(1),(9))+substring(CONVERT([varchar],[SH_CHANGE_DATE],(112)),(1),(8)))+substring([SH_REASON_CODE],(1),(2))) PERSISTED NOT NULL,
 CONSTRAINT SourceTableconstrain PRIMARY KEY CLUSTERED 
(
    [Source_PRIMARY_KEY] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO

DESTINATION : 


CREATE TABLE TableName(
    [SSNO] [char](9) NOT NULL,
    [SH_CHANGE_DATE] [datetime] NOT NULL,
    [SH_REASON_CODE] [char](2) NOT NULL,
    [SH_ANN_SALARY] [money] NULL,
    [GRADE] [char](2) NULL,
    [ITEM] [char](4) NULL,
    [MULTI_POSITNBR] [char](4) NULL,
    [STEP] [char](2) NULL,
    [OFF_STEP] [char](1) NULL,
    [SH_TITLE_NAME] [varchar](30) NULL,
    [SH_CHANGE_AMT] [money] NULL,
    [SH_DIV_DIST_IND] [char](4) NULL,
    [SH_BUDGET] [char](3) NULL,
    [SH_ENGNO] [char](2) NULL,
    [SH_RCDADD_DATE] [datetime] NULL,
    [SH_RCDADD_TIME] [varchar](6) NULL,
    [SH_OCC_CATEGORY] [char](1) NULL,
    [SH_FULL_PART_CD] [char](1) NULL,
    [SH_SUPVY_CLASS] [char](1) NULL,
    [EMPLOYEE_NUMBER] [char](9) NULL,
 CONSTRAINT Tablename PRIMARY KEY CLUSTERED 
(
    [SSNO] ASC,
    [SH_CHANGE_DATE] ASC,
    [SH_REASON_CODE] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO

【问题讨论】:

  • 从表面上看,这似乎不太可能。 SSIS 数据流引擎是强类型的。如果源列是日期时间并且目标也是日期时间并且它是 SQL Server 到 SQL Server,则不应发生任何转换。发布源和目标的表定义以及实际错误消息,最好是数据流的屏幕截图,这足以提供答案或提出更尖锐的问题
  • 请查找所需信息
  • 源是日期,目标是日期时间数据类型\
  • Sql Server 2012 和 Sql Server 2008 R2 都已达到生命周期结束。这意味着他们不再获得任何补丁...甚至对于关键的安全问题也没有。继续使用这些旧版本是危险和不负责任的。升级是第 1 项工作。
  • @JoelCoehoorn 2012 还不是 EoL,那是在 2022 年;它目前处于扩展支持状态。然而,2008 年确实在一年前就达到了 EoL。 2012 年仍在接收安全更新,实际上它在今年 2 月得到了一个。 KB4532098

标签: sql-server ssis


【解决方案1】:

谢谢大家的反馈,我自己解决了这个问题。为了从 sql server 2012 到 2008r2 从日期加载数据到日期时间,我使用了两个 ssis 包,在一个 ssis 包中,我将日期转换为 datetime(n) 数据类型作为列值,并在下一个 ssis 包中复制了加载的列值最初到目的地的地方。这导致在目的地具有相同的数据类型,但仍将数据从日期加载到日期时间数据类型列值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-31
    • 1970-01-01
    • 2014-10-20
    • 1970-01-01
    • 2016-06-29
    • 2018-03-10
    • 2013-04-10
    相关资源
    最近更新 更多