【问题标题】:SSIS returns an incorrect errorSSIS 返回不正确的错误
【发布时间】:2018-05-30 16:28:42
【问题描述】:

我创建了 SSIS 包,它在 SQL Server 中创建了表 MyTable,其中有一列 BaseVariantVersionID。程序首先将数据插入到这个表中。

在包的最后,我应该从表中删除列BaseVariantVersionID

第一次调试没问题。但在第二次尝试时,SSIS 返回验证错误。它不允许使用BaseVariantVersionID 重新创建表,因为下一步包无法在列中插入,现在未显示。

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

更新

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

【问题讨论】:

  • 请提供足够的信息来重现问题。显示导致错误的代码,以及确切的错误消息。

标签: sql-server ssis oledb


【解决方案1】:

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

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

执行 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 中手动添加列,然后双击出现错误的任务,任何缺失字段错误都会消失(现在该列已存在) .之后就可以保存包退出了。

【讨论】:

  • 是的,第一步我重新创建了表。比,我加载这个和其他表的信息。最后,我删除列。
  • 我设置了DelayValidation = True,现在一切正常。非常感谢!
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    如果我正确阅读了您的描述,您会在第一遍删除 ,然后在第二遍尝试重新创建 table 时出错?如果您尝试创建一个已经存在的表,即使它没有“SomeColumn”,也会在运行 #2 时出错。

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

    【讨论】:

    • 不,我在所有步骤后删除列。第一步,我用列重新创建了数据库。但系统返回错误 - 看起来它使用现有表进行验证。在下一条评论中查看图片
    • 您的描述和示例提出了一个问题,即为什么要删除该列,然后在下次执行时使用该列重新创建表。我认为@criticalfix 已经确定了您需要做些什么来验证包。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多