Sql server 当表不存在时,SSIS包失败';不存在,即使它永远不会被访问

Sql server 当表不存在时,SSIS包失败';不存在,即使它永远不会被访问,sql-server,sql-server-2008,ssis,Sql Server,Sql Server 2008,Ssis,在SSIS 2008中,我有一个脚本任务,用于检查数据库中是否存在表并设置布尔变量 在我的数据流中,我基于该变量执行条件拆分,以便根据该表是否存在执行适当的OLEDB命令 如果表确实存在,则包将正确运行。但如果该表不存在,SSIS将检查未运行的OLE DB命令上的元数据,确定该表不存在,并在执行任何操作之前出错 似乎没有任何方法可以捕获或忽略该错误(例如,我尝试增加MaximumErrorCount和各种不同的ErrorRowDescription设置),或者在验证命令时停止该错误(Valida

在SSIS 2008中,我有一个脚本任务,用于检查数据库中是否存在表并设置布尔变量

在我的数据流中,我基于该变量执行条件拆分,以便根据该表是否存在执行适当的OLEDB命令

如果表确实存在,则包将正确运行。但如果该表不存在,SSIS将检查未运行的OLE DB命令上的元数据,确定该表不存在,并在执行任何操作之前出错

似乎没有任何方法可以捕获或忽略该错误(例如,我尝试增加
MaximumErrorCount
和各种不同的
ErrorRowDescription
设置),或者在验证命令时停止该错误(
ValidateExternalMetadata
似乎仅通过设计影响设计器)

我没有权限创建存储过程来包装这种测试,如果OBJECT_ID(“”)不为NULL,OLE DB命令不允许您在正在执行的任何语句上使用
前缀(在本例中,是
从TableName中删除,其中X=?


除了使用脚本组件手动逐行触发
DELETE
命令之外,还有其他方法解决这个问题吗

您可以使用脚本组件为输入路径中的每一行执行DELETE语句,但这可能非常慢,具体取决于要删除的行数

你可以:

  • 将应删除的记录的PK存储到数据库表中(例如:TBL_to_DEL)
  • 通过将TBL_加入到要从中删除记录的表中,添加执行SQL任务和SQL查询以删除记录
  • 设置数据流和执行SQL任务之间的路径(基于变量的约束)
  • 此解决方案比逐行删除快得多

    如果由于某种原因无法创建新表,请查看“我的答案”,查看将数据传递到下一个数据流的其他方法,在下一个数据流中可以使用OleDb source和OleDb命令。无论您选择哪种方式,键都位于约束中,该约束将执行或不执行以下任务(执行SQL任务或数据流),具体取决于变量中的值


    请注意,执行SQL任务不会验证查询,因此,若满足约束且表不存在,则在运行时将失败。如果使用另一个数据流而不是执行SQL任务,请将属性设置为true。这意味着该任务将在执行特定任务之前进行验证,而不是更早。

    谢谢,我将在周一试用并通知您。