SSIS returns 一个不正确的错误

SSIS returns an incorrect error

我创建了 SSIS 包,它在 SQL 服务器中创建了 table MyTable,其中有一列 BaseVariantVersionID。程序首先将数据插入此 table.

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

第一次调试就OK了。但是在第二次尝试时,SSIS returns 验证错误。它不允许用 BaseVariantVersionID 重新创建 table,因为在下一步中,包无法在列中插入,现在不显示。

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

更新

我在完成所有步骤后删除了列。 在第一步中,我用列重新创建了数据库。 但是系统 returns 错误 - 看起来它使用现有的 table 进行验证。

如果我没看错你的描述,你会在第一遍删除 ,然后在尝试重新创建 table第二遍?如果您尝试创建一个已经存在的 table,即使其中没​​有 "SomeColumn",也会在 运行 #2 上出现错误。

如果要重新创建 table,则需要删除它;如果 table 存在,则需要更改代码以重新添加该列。

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

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

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

如果 table 在包开头创建之前已经存在,则必须绝对删除它。

示例执行 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

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

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