【发布时间】:2015-02-17 22:07:30
【问题描述】:
以下是我的源表的元数据:
Hours_StageTbl
type varchar(100)
Op varchar(100)
SN varchar(100)
Hours float
R_Date varchar(100)
Source int
BeginDate date
Age float
以下是我的目标表的元数据:
Hours
HoursId PK, uniqueidentifier
SN varchar(100)
Type varchar(100)
Source int
Date datetime
Op varchar(100)
Age float
Hours float
BornOnDate datetime
以下是我 JOIN 到的表的元数据:
A_Age
Type varchar(50)
SN varchar(50)
Op varchar(50)
Reg varchar(50)
RDateAge decimal
Date date
以下是我的SQL Command Text中的OLE DB Source Editor中的SSIS:
SELECT
F.Type
,F.Op
,F.SN
,F.Hours
,convert(date, F.R_Date +'28', 111) AS 'R_Date'
,F.Source
,F.BeginDate
,F.Age
,A.Type
,A.SN
,A.Op AS 'A_Op'
,A.Reg
,A.RDateAge
,A.Date
,(DATEDIFF(dd, convert(date, F.R_Date +'28', 111), GETDATE())/365.00) + A.RDateAge as 'AdjustedAge'
FROM
Hours_StageTbl F
INNER JOIN
A_Age A
ON
F.SN = A.SN
ORDER BY
F.SN
,F.Date
我的OLE DB Source Editor 流向Data Conversion 并再次将Date 从Source 表转换为DT_Date,然后流向OLE DB Command。
必须注意,Date varchar(100) From Hours_StageTbl(源表)将被插入到Date datetime 中的Hours(目标表)中,我相信这会给我带来问题。
无论我如何尝试修复转换,我都会收到以下错误:
An OLE DB record is available. Source: "Microsoft SQL Server Native Client 11.0" Hresult: 0x80040E07 Description: "Conversion failed when converting date and/or time from character string.".
我花了几个小时试图纠正这个问题。多一双眼睛就好了。
【问题讨论】:
-
显示
F.R_Date和F.Date中的数据 -
这很可能意味着这个表达式:
convert(date, F.R_Date +'28', 111)失败,因为该字段中的数据与所需的格式不匹配(111 是YYYY/MM/DD)。然而,这可能是由于很多事情。解决问题的第一步是运行查询的选择性部分,直到您隔离问题。例如,打开 SSMS 并运行以下命令:SELECT convert(date, R_Date +'28', 111) FROM Hours_StageTbl你仍然得到错误吗?如果是这样,请检查该字段中的数据并找到与格式不匹配的数据。 -
现在我仔细观察,您已经在描述中指定了字段
R_Date。无论如何,请查看您的数据并找出哪些数据与格式不匹配。 -
@Nick.McDermaid 我明白了。当我重新开始工作时,我会检查并重新发布。
-
@Nick.McDermaid 这是我发帖时的一个错误。我仍然找不到出现此错误的原因。
convert()没有完全转换吗?
标签: sql-server ssis type-conversion