具有 Read/Write 个变量的 SSIS 脚本任务不会在 ScriptResults.Failure 上停止

SSIS Script Task with Read/Write Variables doesn't stop on ScriptResults.Failure

如果我不向脚本任务传递任何变量,我可以通过设置 Dts.TaskResult 使其失败或成功。但是当我传递一些 read/write 变量时,我不能让它失败(一直执行下去),但我仍然可以让它成功。

我是不是遗漏了一些设置?请帮忙。

我正在使用 Sql Server 2012(针对 BIDS 的 VS 2010)。 脚本代码:

Dts.TaskResult = (int)ScriptResults.Failure;
return;

Read/write 传递的变量:

User::FileName

问题可能是由变量死锁引起的

尝试使用以下代码设置变量值:

Variables lockedVariables = null;
 Dts.VariableDispenser.LockOneForWrite("FileName", ref lockedVariables);
lockedVariables["FileName"].Value = "bla bla bla"; 
lockedVariables.Unlock();

并从脚本中删除变量ReadWriteVariables

哈迪, 非常感谢您的回复,真的很感激。 我在其他帖子中看到类似的锁定问题,尝试过但失败了。但后来我自己理解了根本原因,我将其发布,以便为其他人节省时间:

后来才知道,除了上面的脚本任务和readwrite变量,我在整个包的错误处理事件中也用到了那个ReadWrite变量。当在错误处理程序中使用 SSIS 包中使用的 ReadWrite 变量时,即使发生异常或 Dts.TaskResult 设置为失败,它也会使包不会失败。相反,它进入 运行 无限循环!很古怪,是吧?我希望 Microsoft 计划 return 在错误处理程序中使用脚本任务的 ReadWrite 变量而不是无限执行的某种验证错误...

无论如何,我通过不在脚本任务中使用该 ReadWrite 变量并将其设置在错误处理程序使用的某些表达式任务中来解决问题。