如果我不将任何变量传递给脚本任务,我可以通过设置 Dts.TaskResult 使其失败或成功。但是当我传递一些读/写变量时,我不能让它失败(永远保持执行),但我仍然可以让它成功。
我错过了一些设置吗?请帮忙。
我正在使用 Sql Server 2012(用于 BIDS 的 VS 2010)。脚本代码:
Dts.TaskResult = (int)ScriptResults.Failure;
return;
读/写变量传递:
User::FileName
如果我不将任何变量传递给脚本任务,我可以通过设置 Dts.TaskResult 使其失败或成功。但是当我传递一些读/写变量时,我不能让它失败(永远保持执行),但我仍然可以让它成功。
我错过了一些设置吗?请帮忙。
我正在使用 Sql Server 2012(用于 BIDS 的 VS 2010)。脚本代码:
Dts.TaskResult = (int)ScriptResults.Failure;
return;
读/写变量传递:
User::FileName
哈迪,非常感谢您的回复,非常感谢。我在其他帖子中看到了类似的锁定问题,尝试过但失败了。但是我后来自己能够理解根本原因,所以我将其发布,以便为其他人节省时间:
后来我意识到,除了上面的脚本任务和读写变量之外,我还在整个包的错误处理事件中使用了那个读写变量。当在错误处理程序中使用 SSIS 包中使用的 ReadWrite 变量时,即使发生异常或 Dts.TaskResult 设置为失败,它也会使包不会失败。相反,它在无限循环中运行!很古怪,嗯?我希望微软计划返回某种验证错误,以便在错误处理程序中使用脚本任务的 ReadWrite 变量,而不是无限执行......
无论如何,我通过不在脚本任务中使用该 ReadWrite 变量并将其设置在某些表达式任务中以供错误处理程序使用来解决了该问题。
该问题可能是由变量死锁引起的
尝试使用以下代码设置变量值:
Variables lockedVariables = null;
Dts.VariableDispenser.LockOneForWrite("FileName", ref lockedVariables);
lockedVariables["FileName"].Value = "bla bla bla";
lockedVariables.Unlock();
并从脚本中删除变量ReadWriteVariables