SSIS错误:VS_NEEDSNEWMETADATA

时间:2016-12-29 21:49:40

标签: sql sql-server tsql ssis sql-server-2016

我目前正在使用Visual Studio 2015(在BIDS 2008中制作)更新所有ETL,并将它们重新部署到在SQL Server 2016上运行的新报表服务器(最初为2008R2)。

在更新其中一个ETL并尝试在新服务器上运行时,我收到此错误:

  

包执行失败。步骤失败了。

有时它也会产生此错误:

  

来源:加载事实表SSIS.Pipeline描述:“复制到事实   表“验证失败并返回验证状态   “VS_NEEDSNEWMETADATA”。

我尝试删除并重新添加OLEDB Destination,连接字符串并打开列映射以刷新元数据。我还重新创建了整个数据流任务,但我仍然遇到同样的错误。

该软件包在我的本地计算机上运行良好。

更新

我开始拆开包装并仅运行它们以尝试缩小哪个部分失败。它似乎没有加载到临时表中,但我找不到原因。

我最终决定尝试重新创造整个事物。重新创建整个包后,仍然没有运气。下图来自服务器本身的事件查看器,但它没有给我任何新信息。

enter image description here

Package error from event viewer

9 个答案:

答案 0 :(得分:10)

我终于找到了问题,而且我是如何做到的。

因为我从SSMS获得的错误信息并不是非常有见地,所以我首先打开了我的远程桌面并登录到服务器。然后我转到管理工具>事件查看器,然后是Windows日志>应用程序,看看失败的事件是否会提供更多细节。

enter image description here enter image description here 它没有给我很多。

我采取的下一步是运行包from the command line,因为消息应该更详细。打开cmd,将目录更改为我的包中的目录,然后......

DTEXEC /FILE YourPackageName.dtsx

最后,此处的错误消息显示程序包尝试写入的表中缺少列。我添加了那些列,瞧!

答案 1 :(得分:5)

我已经尝试了上面和其他站点提供的所有解决方案。什么都没用。

我从我的朋友那里得到了一个建议。

以下是步骤:

  1. 右键单击“源/目标数据”流组件。
  2. 转到高级编辑器->组件属性
  3. 将ValdateExternalMetadata查找为 False

试试运气。这是一个可悲的问题,让我无知了两天。

enter image description here

答案 2 :(得分:2)

如评论中所述,
如果它在您的开发环境中运行正常,那么问题不在于包,而在于服务器上的预定作业。尝试重新创建。

如果不起作用,
看起来服务器有一个它正在使用的包的缓存实例而不是更新的包。尝试重命名您的包并使用新包名创建一个新作业,看看是否有效。

如果不起作用, 那时我所能推荐的就是将包裹向下切割直至成功,然后添加下一步失败。

从您的解决方案中听起来,开发环境比部署的解决方案更能容忍架构更新。很高兴你能够解决,消除杂乱的帮助。

答案 3 :(得分:1)

这最终成为我的权限问题。 OLE DB 源正在使用从 SQL 视图中选择的存储过程。此视图已加入另一个数据库中的表,但不幸的是,SQL 代理作业步骤在其下运行包的代理帐户没有对该数据库中表的 SELECT 权限。这就是为什么包在 Visual Studio 中运行良好,但在部署到服务器时不能从作业中运行。我通过从存储过程中取出 SELECT 语句并将其直接放在 OLE DB 源控件的源查询框中找到了错误的根本原因,这导致它最终返回“SELECT 权限被拒绝”错误消息。此错误显然对 SSIS 隐藏,因为代理帐户 DID 对存储过程具有执行权限。

答案 4 :(得分:0)

您是否尝试删除并重新创建源代码?当我得到这个时,我通常可以修改任何有错误的对象,但必须删除并重建它们之间的路径,但有时我必须删除数据流中的所有内容并重新创建它。

答案 5 :(得分:0)

应在SQL Server代理下创建SSIS包执行的代理。然后,您应该将作业步骤(或步骤)更改为“运行”作为您已创建的代理。

前段时间我遇到了同样的问题,代理修复了它。

如果你已经尝试过,请原谅我。

答案 6 :(得分:0)

我遇到了同样的问题,我的问题是两个环境之间存在差异,同一个表中的同一个字段曾用大写字母写过,有一次没用。所以这个名字是相同的,但是这个差别很小(例如isActive vs IsActive)。

这来自重构工作,我们使用VS数据库发布没有更新字段名称。

答案 7 :(得分:0)

将源文件中的两列插入表的同一字段中时,通常会收到该消息。

我的文本文件有两次“ neighborhood”(不同列使用相同的标签),我的表具有“ neighborhood”和“ neighborhoodb”(请注意末尾的“ b”)。导入将尝试将两个文本列都导入字段“ neighborhood”,而忽略“ neighborhoodb”字段,它将失败,并显示“ VS_NEEDSNEWMETADATA”错误。

答案 8 :(得分:0)

重新创建工作对我有用。作业的某些缓存版本可能导致class ShopViewSet(ModelViewSet): queryset = Shop.objects.all() serializer_class = ShopSerializer lookup_field = 'slug' def create(self, request, *args, **kwargs): serializer = self.get_serializer(data=request.data) serializer.initial_data['user'] = request.user.id serializer.initial_data['slug'] = slugify(request.data['name']) serializer.is_valid(raise_exception=True) self.perform_create(serializer) headers = self.get_success_headers(serializer.data) return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers) 错误。程序包已正确执行,但是在由代理作业执行时失败。