我已经问过这个问题,我以为我找到了解决方案,但我又被困住了。我遇到了解锁变量的问题。
我正在运行一个 SQL Server 代理作业,它有一个带有 Microsoft Visual C# 2008 的脚本任务,如下所示。我没有在脚本任务编辑器读/写变量列表中列出变量。在我的 SSIS 包中,我有 For Loop Container,它循环这个脚本任务,直到文件确实存在。
https://mitchellsql.wordpress.com/2014/09/06/ssis-script-taskdoes-file-exists/
public void Main()
{
// Lock variables
Dts.VariableDispenser.LockForRead("User::FolderPath");
Dts.VariableDispenser.LockForWrite("User::FileExistsFlg");
// Create a variables 'container' to store variables
Variables vars = null;
// Add variables from the VariableDispenser to the variables 'container'
Dts.VariableDispenser.GetVariables(ref vars);
string filepath;
filepath = vars["User::FolderPath"].Value.ToString();
vars["User::FileExistsFlg"].Value = File.Exists(filepath);
// Release the locks
vars.Unlock();
Dts.TaskResult = (int)ScriptResults.Success;
}
}
}
错误
当 SQL 作业失败但包在通过 Visual Studio 运行时完美运行时,我收到此错误:
信息
以用户身份执行:PSFACAMDWHSQL1\SYSTEM。Microsoft (R) SQL Server Execute Package Utility Version 10.50.4270.0 for 64-bit 版权所有 (C) Microsoft Corporation 2010。保留所有权利。开始时间:12:26:43 错误:2015-03-03 12:41:25.79 代码:0xC001404F
来源:For 循环容器描述:此变量集合已解锁。Unlock 方法仅在分配的变量集合上调用一次。结束错误 DTExec:包执行返回 DTSER_FAILURE (1)。开始时间:12:26:43 结束时间:12:41:25 经过时间:881.921 秒。包执行失败。步骤失败。
我将不胜感激任何帮助。