SSIS返回错误的错误

时间:2018-05-30 16:28:43

标签: sql-server ssis oledb

我创建了SSIS包,它在SQL Server中使用列MyTable创建了表BaseVariantVersionID。程序首先将数据插入此表。

在包的末尾,我应该从表中删除列BaseVariantVersionID

首先调试就可以了。但是在第二次尝试时,SSIS返回验证错误。它不允许使用BaseVariantVersionID重新创建表,因为在下一步中,包不能在列中插入,现在不会显示。

也许你知道一些属性来禁用当前的数据库检查?

更新

我在所有步骤后删除列。 在第一步,我用列重新创建了DB。 但系统返回错误 - 看起来它使用现有表进行验证。

enter image description here

3 个答案:

答案 0 :(得分:2)

这可能是我能想到的几个问题。

如果表格在包裹开头创建之前已经存在,则必须完全删除该表格。

示例执行SQL任务:

IF OBJECT_ID('MyTable', 'U') IS NOT NULL
    DROP TABLE MyTable
GO

CREATE TABLE MyTable (etc...) GO
ALTER TABLE MyTable ADD COLUMN (etc...) GO

其次,您可以在“数据流任务属性”窗口中设置DelayValidation = True(通常在单击设计区域中的数据流任务后,右下角)。这会将验证延迟到运行时间。

如果此时您缺少字段错误,可以在SQL Server Management Studio中手动添加该列,然后双击带有错误的任务,任何缺少的字段错误都应该消失(现在该列存在) 。之后,您可以保存包并退出。

答案 1 :(得分:1)

对于执行SQL任务,您可以将BypassPrepare设置为True。有时,这将允许您设计和构建一个在设计时无法验证的程序包,但在运行时将验证正常。

但我必须质疑在运行时创建列和表的必要性。你确定需要这样做吗?在现有的表结构中使用SSIS移动数据是一种更典型的用例,而不是在运行时创建它们。

答案 2 :(得分:0)

如果我正确阅读了您的说明,您就会在第一次传递时删除,然后在第二次传递时尝试重新创建时出错?如果您尝试创建一个已经存在的表,那么在第2次运行时会出现错误,即使它没有" SomeColumn"在它。

如果您想要重新创建表格,或者更改代码以在表格存在时添加列,则需要删除该表格。