SSIS返回错误的信息

5
我创建了一个SSIS包,用于在SQL Server中创建名为MyTable的表,并带有一个名为BaseVariantVersionID的列。程序首先向该表中插入数据。

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

第一次调试没有问题。但在第二次尝试时,SSIS返回一个验证错误。它不允许重新创建具有BaseVariantVersionID的表,因为在下一步中包无法在现在不存在的列中进行插入。

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

更新

我在所有步骤之后删除了列。 并且在第一步中我重新创建了带有列的数据库。 但系统返回错误 - 看起来它使用现有的表进行验证。

enter image description here


1
请提供足够的信息以重新创建问题。显示导致错误的代码和确切的错误消息。 - Tab Alleman
3个回答

3
这可能涉及到几个问题。在包的开头创建表之前,务必删除已经存在的表。
例如,执行 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(通常在单击设计区域中的Dataflow Task后位于右下角)。 这将延迟验证直到运行时。

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


是的,在第一步我重新创建了表格。然后,我为此表格和其他表格加载了信息。最后,我删除了列。 - Maryna
我设置了 DelayValidation = True,现在一切都按预期工作。非常感谢! - Maryna

2
对于Execute SQL任务,您可以将BypassPrepare设置为True。有时这样做可以让您设计和构建一个包,在设计时不进行验证,但在运行时可以进行验证。
但我必须质疑在运行时创建列和表的必要性。您确定需要这样做吗?更典型的用例是在现有表结构中移动数据,而不是在运行时创建它们。

0
如果我正确理解了您的描述,您是在第一次通过时删除了,然后在第二次通过时尝试重新创建时出现错误?即使它没有“SomeColumn”,如果您尝试创建已经存在的表,第2次运行也会出错。
如果您要重新创建表或更改代码以添加列,则需要删除表。

不,我在所有步骤完成后删除列。而在第一步,我重新创建了带有列的数据库。但是系统会返回错误 - 看起来它使用现有表进行验证。请查看下一条评论中的图像。 - Maryna
你的描述和示例引出了一个问题,为什么你要删除该列,然后在下一次执行时重新创建带有该列的表。我认为@criticalfix已经确定了你需要做的来使包验证通过。 - DaveE

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