SSIS验证失败并返回验证状态"VS_ISBROKEN"。

9

我正在尝试创建一个临时表,并使用该临时表处理两个数据流。它在序列容器中,如果我只执行容器,它就可以完美运行,但是当整个包被运行时,它会返回以下错误:

信息:0x4004300A at V-AccidentCodesBase,SSIS.Pipeline:验证阶段开始。

错误:0xC0202009 at V-AccidentCodesBase,插入到Temp Table [69]: SSIS错误代码DTS_E_OLEDBERROR。发生了OLE DB错误。错误 代码:0x80040E14。

可用的OLE DB记录。来源:“Microsoft SQL Server Native Client 11.0” Hresult: 0x80040E14 描述:“无法准备语句”。

可用的OLE DB记录。来源:“Microsoft SQL Server Native Client 11.0” Hresult: 0x80040E14 描述:“无效的对象名称 '##TmpAccidentCode'。”

错误:0xC004706B at V-AccidentCodesBase,SSIS.Pipeline:“插入到 Temp Table”验证失败,并返回验证状态 “VS_ISBROKEN”。

错误:0xC004700C at V-AccidentCodesBase,SSIS.Pipeline:一个或多个 组件验证失败。

错误:0xC0024107 at V-AccidentCodesBase:任务验证期间发生错误。


到目前为止,我已经完全声明了表格,以排除其找到正确的数据库,并重新创建包,因为阅读到更改可能会损坏元数据。 - epelletier9740
1
当您使用用户表而不是临时表时会发生什么? - Dave C
@epelletier9740 - 我无法读取你的思想。请发布更多细节。在发布之前,请清除个人信息。 - Erran Morad
1
如果您在使用用户表时遇到相同的错误,则需要查看您的SSIS包(屏幕截图),以便我们了解您如何创建表,它位于哪里以及您如何插入数据(向我们展示目标任务)。这是一个很好的测试,因为最初我的想法是因为#表是非持久性的(除非您配置SSIS为代表您维护连接)。 - Dave C
1
@epelletier9740 - 你是指SSIS 2012吗?我猜一下。如果没有看到包,我真的没什么别的办法了。你是否将“RetainSameConnection”设置为True,以便连接管理器让你连接到创建临时表的服务器/实例(而不是DB,那将是tempDB)? - Erran Morad
显示剩余7条评论
7个回答

9
我会将DelayValidation属性设置为True。您可能只需要在序列容器上进行此设置,或者您可能需要在子对象(例如数据流任务)上重复该设置。

2

我也遇到了同样的错误信息。问题出在运行ETL的用户(一个服务帐户)对数据库的权限上。确保运行包的用户具有足够的权限来执行查询。


1
在我的情况下,我从OleDB切换到SQNCLI,它起作用了 :/

1

正如其他人所提到的,错误可能是由于不同的原因引起的。在我的情况下,我意识到我试图在SSIS的脚本部分将一些空值转换为整数。类似于:

ProductsBuffer.ProductId = Int64.Parse(reader["ProductId"].ToString());

所以修复很容易。我只需在转换之前检查字段,以确保它不为空:
 if (reader["ProductId"] != DBNull.Value)
            ProductsBuffer.ProductId = Int64.Parse(reader["ProductId"].ToString());

0

我遇到了相同的错误,在我的情况下,我正在使用SSIS将数据从Excel文件导入到几个表中。

我使用了两个不同的文件,其中一个失败了,而另一个成功了。经过一些审查,我发现我在包内引用了Excel表的名称,因此Excel表必须与您在SSIS包中使用的名称完全相同(我认为它是区分大小写的)。


0

我正在使用VS 2017。我想知道一段时间后它是否会忘记您的“保存”数据库密码,因为我的密码可以工作了好几天,然后突然间失效,出现了VS_ISBROKEN错误。在重新输入我一个数据库连接的密码之后,尽管我先前已经勾选了保存密码复选框,但它又开始正常工作了。


0

我最终解决了问题,问题是 tempDB 超载。当我把进程放慢到每次只执行一个命令到 tempDb 时,整个过程都运行顺利。


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