Sql server 从SQL Server 2012到2008 R2版本加载数据,日期类型加载到日期时间数据类型列

Sql server 从SQL Server 2012到2008 R2版本加载数据,日期类型加载到日期时间数据类型列,sql-server,ssis,Sql Server,Ssis,我必须将数据从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] [ch

我必须将数据从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

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

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