Sql server 由于日期时间转换,数据流任务在源失败?SSIS 2008

Sql server 由于日期时间转换,数据流任务在源失败?SSIS 2008,sql-server,ssis,Sql Server,Ssis,我以前看到过这种类型的错误(例如截断),之前是字符串,但没有datetime字段 在源代码处有一个似乎失败的数据流任务。OLEDB数据源是对过程的调用,在resultset的列中是datetime字段GAPPOSTDT。返回值是datetime,该过程返回的结果与预期结果一样好。当我在数据流任务中运行它时,情况并非如此。查看oledb源的高级属性,我看到该字段的类型设置为database timestamp[DT_DBTIMESTAMP],这似乎是正确的 是什么原因导致此字段未映射 我试着简单地

我以前看到过这种类型的错误(例如截断),之前是字符串,但没有datetime字段

在源代码处有一个似乎失败的数据流任务。OLEDB数据源是对过程的调用,在resultset的列中是datetime字段GAPPOSTDT。返回值是datetime,该过程返回的结果与预期结果一样好。当我在数据流任务中运行它时,情况并非如此。查看oledb源的高级属性,我看到该字段的类型设置为database timestamp[DT_DBTIMESTAMP],这似乎是正确的

是什么原因导致此字段未映射

我试着简单地删除数据流任务并重新创建它。同样的问题

请参阅下面的错误消息

错误:数据流任务处的0xC020901C,OLE DB源[1]:存在错误 输出“OLE DB源”上的输出列“GAPOSTDT”(61)出错 输出“(11)。返回的列状态为:“无法删除该值。” 已转换,因为可能会丢失数据。“。错误:0xC0209029位于 数据流任务,OLE DB源[1]:SSIS错误代码 DTS_E_导致的传输故障或错误。“输出列”GAPOSTDT (61)“失败,因为发生错误代码0xC0209072,并且错误行 “输出列”GAPOSTDT(61)上的处置指定 错误。指定对象的指定对象上发生错误 组成部分。在此之前可能会发布错误消息,其中包含更多信息 关于失败的信息

[更新#1]
SSIS 2008

因此,我将过程输出更改为返回varchar(10),而不是datetime。数据流中的OLEDB源现在出现以下错误

错误:数据流任务处的0xC020901C,OLE DB源[1]:输出“OLE DB源输出”(11)上的输出列“GAPOSTDT”(61)出错。返回的列状态为:“文本被截断或目标代码页中的一个或多个字符不匹配。”。 错误:0xC020902A at Data Flow Task,OLE DB Source[1]:“输出列”GAPOSTDT“(61)”由于发生截断而失败,“输出列”GAPOSTDT“(61)”上的截断行处理指定截断失败。在指定组件的指定对象上发生截断错误

我现在怀疑数据中有一些“愚蠢”的字符。源系统中使用的排序规则是SQL\u Latin1\u General\u CP1\u CI\u AS

[更新#2]

好的,我想我可能已经发现了问题。在我的过程中,我有一个“虚拟”结果,因为我的过程使用临时表,而这是SSI的一个“解决方案”(请参阅有关此问题的其他主题)。我的最终结果和虚拟结果的列顺序错误。因此,这会将数据放入错误的列中。我在安装data viewer时注意到了这一点。在它弹出后,我注意到数据进入了错误的列。奇怪的是,我想,在回顾我的过程之后,我找到了罪魁祸首。

这是因为输入列的数据类型与目标列不匹配。您提到,您已经看到,在fot varchar列之前,这是因为该列的输入记录的大小(数据长度)小于目标,如果输入为varchar(30),则目标为varchar(20),这将导致此问题。检查您的数据类型,我猜当您尝试使用
datetime
datetime2
datetimeoffset
时,可能会有一些冲突

例如:

input varchar(30)   destination varchar(30)  perfectly match
input varchar(20)   destination varchar(30)  fine but a warning
input varchar(30)   destination varchar(20)  if actual is smaller than 20, that is fine, but if bigger than 20, cause error

datetime字段始终存在问题…;)

尝试在源查询中将此字段转换为字符串,然后应用派生列转换所需的更改。在我居住的地方,我们使用日期格式dd.mm.yyyy,但我得到了至少3种其他不同格式的日期


也许这不是最好的答案,但值得一试。。。它很适合我……:)

什么版本的SSIS?这可能不重要,但可以。看到上面的更新这至少帮助我获得了一个数据查看器来显示,这让我发现我试图将数据放入错误的列中,因为在过程中使用了“虚拟”结果。虽然导致问题的字段是datetime,但oledb源将完全失败。当我返回字符串时,至少有一些记录会得到输出并显示在查看器中。