多个SSIS包错误

5

我有一个SSIS包,是3年前由其他人构建的,而这个人已经离去。在过去的一年里,我多次运行它,但现在我遇到了这些错误,我不知道这些错误为什么会出现。这个ssis包从Excel文档导入到临时表中。一旦信息在临时表上第二次运行,它就会从临时表中提取并将其插入到生产表中,同时添加额外的列。以下是我遇到的错误:

[OLE DB Destination [162]] Error: SSIS Error Code DTS_E_OLEDBERROR.  An OLE DB error has 
occurred. Error code: 0x80004005.
An OLE DB record is available.  Source: "Microsoft SQL Server Native Client 10.0"  Hresult:
0x80004005  Description: "Unspecified error".

[OLE DB Destination [162]] Error: There was an error with input column "UserProfileID" (299) on 
input "OLE DB Destination Input" (175). The column status returned was: "The value violated the 
integrity constraints for the column.".

[OLE DB Destination [162]] Error: SSIS Error Code DTS_E_INDUCEDTRANSFORMFAILUREONERROR.  The
"input "OLE DB Destination Input" (175)" failed because error code 0xC020907D occurred, and 
the error row disposition on "input "OLE DB Destination Input" (175)" specifies failure on 
error. An error occurred on the specified object of the specified component.  There may be 
error messages posted before this with more information about the failure.

[SSIS.Pipeline] Error: SSIS Error Code DTS_E_PROCESSINPUTFAILED.  The ProcessInput method on 
component "OLE DB Destination" (162) failed with error code 0xC0209029 while processing input 
"OLE DB Destination Input" (175). The identified component returned an error from the 
ProcessInput method. The error is specific to the component, but the error is fatal and will
cause the Data Flow task to stop running.  There may be error messages posted before this with 
more information about the failure.

当我看到“输入列'UserProfileID'存在错误”时,我在临时表中查看它并发现它是空的。这是包在运行时应该找到的列之一。但我不知道这个信息是否在第二次运行时找到,或者它是否应该在第一次填充。所以我不确定我遇到的问题是否就是这个。
我非常感谢任何可以提供帮助的人。如果需要任何其他信息,我会尝试提供。感谢任何能够提供帮助的人。 从Excel文件导入到临时表 从临时表导入到真实表 数据流

请发布一些控制流和数据流的截图,以便我们了解正在发生的情况。暂存表和实际表的表结构也不会有任何影响。拜托啦 ;) - billinkc
好的,我正在处理,谢谢。 - Joe W
你可以做的一件事是在数据流上放置一个数据查看器,以查看正在发送的数据。这将有助于您进行调试。右键单击绿色线并选择“数据查看器”。 - HLGEM
2个回答

5

最近这张表的结构有没有改变?如果字段之前没有限制,现在有了限制,那么您需要在SSIS包中解决问题,将不符合约束条件的记录移动到异常表中,或者找出为什么在导入的数据类型不适合时添加了约束。

我接下来会查看Excel文件。当一个包已经运行了一段时间,突然出现问题并且插入数据的表的结构没有任何更改时,则很可能是文件中的数据不正确。


表格的结构保持不变。我已经确认文件中没有错误,因为当我遇到无法导入的杂行时,这是我做的第一件事。我已经两次要求文件制作者仔细检查第一行是否有错误,因为这会导致整个文件无法导入。 - Joe W
2
你知道吗,这次我回去自己看了一下文件,凭借我所发现的有限的文件知识,在所有行中找到了一个小错误。我把它带给了那个曾向我保证过它是正确的人,并向她展示了。谢谢你让我开始怀疑它。现在我又有了另一个问题,但这将是解决这个问题的答案。再次感谢! - Joe W
2
@JoeW,从中可以得出一个结论,那就是你总是要自己检查文件。你告诉提供者文件已经损坏,为什么不让他们验证一下是否正常呢?他们通常会说一切都很好,而不去看它。 - HLGEM

3
我认为这个信息的重要部分是:
"The value violated the integrity constraints for the column."

你的目标地是否允许在该字段中使用空值? 你能手动插入行吗? 如果将该字段中的空值行删除,它是否成功运行?
关于您的评论 我已经确信文件没有错误 如果您可以确定由于字段中的空值而无法导入的行,请将该集合发送回去并询问该人员这些行是否有效,因为它们正在破坏导入?
好的,根据您提供的额外信息,我可以看到问题是userProfileID字段中的空值,该字段不允许为空。那么问题就变成了,什么过程应正确确定userProfileID值?它是updateIDs步骤吗?还是直接从Excel输入文件复制的?

有一些允许为空,但是那些不允许为空的却为空了。而且所有具有空值的行都是如此,而不仅仅是一些。这就是让我困惑的地方,我从未见过它返回这些列的所有空值。 - Joe W
问题可能出在上游。检查源数据并确保其被正确填充。 - Beth
好的,我正在尝试做这个,但我对ssis还比较新。我进入了任务“将临时数据导入实际表”的数据流程中,在OLE DB源下面的错误输出中,它列出了所有的列,并且对于错误,它显示“失败组件”,截断显示:“失败组件”,描述显示:“转换”。在目标位置,错误输出没有列,但是有错误“失败组件”和插入的描述。我不知道为什么会有转换错误,因为它要插入具有相同数据类型的每个列的表中。这有助于您看到问题吗? - Joe W

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接