2014-10-04 208 views
4

我已经使用SQL Server中的导入/导出实用程序将数据从视图导出到Excel文件中创建了一个SSIS包。我还通过SQL Server中的计划安排了它,并且一切正常。如何绕过SSIS VS_NEEDSNEWMETADATA错误?

从数据导出数据的观点实际上是从多个视图等获取数据,在“层次结构”中关于3个级别。

当我修改进入顶级视图(从中导出数据)的任何视图的列别名时,遇到错误VS_NEEDSNEWMETADATA

研究后,我明白这就是为什么我得到的错误,但有什么办法来“传播”的“新视图”的元数据,所以我不必每次创建时重新创建SSIS包视图结构的变化?

回答

3

没有。 SSIS中的数据流与源紧密相连。对列名或数据类型的更改将导致验证步骤失败,导致出错。

为了缓解它,我要么保持你的列别名相同 - 视图/表值函数/存储过程在这方面很方便。

我会使用的另一种方法是自动创建包。根据你的个人资料,我怀疑这是一件简单的事情。不要在SSMS中右键单击来为每次更改重新创建您的SSIS包,请使用您认为合适的任何技术。我使用基本的.NET SSIS库来创建包,但当我使用COM(数据流项)时,它们对我来说是痛苦的。然后我使用EzAPI构建了一些包,这些包抽象掉了一些COM的东西,但它不是100%完整的。我目前对备用包装施工的热爱是Biml

从CodePlex下载BIDS Helper。它是免费的,并提供了许多有用的功能,但并未削减SSIS/SSRS/SSAS的开发。可以将Biml XML转换为SSIS包XML。你可以look through my answers,看看它的一些工作方式。在你的情况下,它将成为Excel目的地的一个非常基本的OLE DB源。您可以指定源视图名称,并且每次对视图进行更改时,单击生成包并完成。 Biml将接触到您的信息来源,识别元数据并使用它为您的目的地生成数据类型和名称。

+0

嗨billinkc,你可以发送一些示例biml代码来绕过此错误或如何自动刷新源元数据 – Jack 2016-03-16 04:33:41

+0

嗯...... BIML需要在每次更改电子表格时重新创建SSIS包。是。它在Visual Studio中自动执行该过程。但不能从已部署到SQL Server或其他位置的SSIS包内自动运行。 BIML虽然对某些人有帮助,但并未回答所提出的问题。 – TamusJRoyce 2017-05-30 20:55:01

+0

@TamusJRoyce答案在第一句 - 它不能做,我解释原因。我提出了两种避免根本原因的方法。首先是退出改变你的来源。第二种是采取一种方法,可以自动完成问题的解决 – billinkc 2017-05-31 14:56:21

0

工作的唯一方法是制作一个脚本任务,它根据来自文件的数据读取您的表架构并添加或更改它。你将不得不通过C#自定义解析你的文件。并通过C#连接并编写您的数据库。为了保持与SSIS相同的性能,实现一个IDataReader并将其传递给SqlBulkCopy。 DataTable也可能实现IDataReader。

或者购买连接到SSIS的第三方实用程序。并将该产品的程序集部署到SQL Server。

我会说,这是一个巨大的痛苦。我发现将.csv文件保存到Hadoop/HDFS + SQL Server和Polybase使其在不使用etl的情况下自动查询变得更容易。