在进程终止时更新 SSIS 自定义组件中的变量不持久
Update a variable in SSIS Custom component not persistent as the process terminates
我目前正在开发一个 ssis 自定义组件,在设计时我创建了一个用户变量并随时更新它。
现在,当我执行包时,在 PrimeOutput
方法中我成功更新了变量,但是当进程终止时变量不是持久的,我得到的唯一值是旧值。
这是我更新变量的方法:
IDTSVariables100 variables = null;
VariableDispenser.LockOneForWrite(name, ref variables);
variables[name].Value = newValue;
variables.Unlock();
假设你的变量名是MyVar
VariableDispenser variableDispenser = (VariableDispenser)this.VariableDispenser;
variableDispenser.LockForWrite("User::myVar");
IDTSVariables100 vars;
variableDispenser.GetVariables(out vars);
// Set the variable
vars["User::myVar"].Value = newValue;
// Unlock the variable
vars.Unlock();
有关更多信息,您可以参考这个有用的链接:
- http://microsoft-ssis.blogspot.com/2011/01/how-to-use-variables-in-script.html
- https://hernandezpaul.wordpress.com/2012/12/14/read-and-write-variables-in-a-script-component-in-ssis-sql-server-integration-services-using-c/
更新 1
看完你的评论"but after the package finish executing, the variable reset to the old value"
默认情况下存储在包文件中的变量值是您在设计包时指定的值(以编程方式或使用visual studio)
此外,如果在脚本中更改变量值,它只会在执行时更改值,并且不能从同一 DataFlow Task
中的另一个组件读取新值,当当前 DataFlow Task
执行完毕
有用的链接
如果您有兴趣以编程方式编辑包,您可以参考以下链接
- https://docs.microsoft.com/en-us/sql/integration-services/building-packages-programmatically/creating-a-package-programmatically
- https://docs.microsoft.com/en-us/sql/integration-services/building-packages-programmatically/working-with-variables-programmatically
- How to edit SSIS packages programatically in VB?
我目前正在开发一个 ssis 自定义组件,在设计时我创建了一个用户变量并随时更新它。
现在,当我执行包时,在 PrimeOutput
方法中我成功更新了变量,但是当进程终止时变量不是持久的,我得到的唯一值是旧值。
这是我更新变量的方法:
IDTSVariables100 variables = null;
VariableDispenser.LockOneForWrite(name, ref variables);
variables[name].Value = newValue;
variables.Unlock();
假设你的变量名是MyVar
VariableDispenser variableDispenser = (VariableDispenser)this.VariableDispenser;
variableDispenser.LockForWrite("User::myVar");
IDTSVariables100 vars;
variableDispenser.GetVariables(out vars);
// Set the variable
vars["User::myVar"].Value = newValue;
// Unlock the variable
vars.Unlock();
有关更多信息,您可以参考这个有用的链接:
- http://microsoft-ssis.blogspot.com/2011/01/how-to-use-variables-in-script.html
- https://hernandezpaul.wordpress.com/2012/12/14/read-and-write-variables-in-a-script-component-in-ssis-sql-server-integration-services-using-c/
更新 1
看完你的评论"but after the package finish executing, the variable reset to the old value"
默认情况下存储在包文件中的变量值是您在设计包时指定的值(以编程方式或使用visual studio)
此外,如果在脚本中更改变量值,它只会在执行时更改值,并且不能从同一 DataFlow Task
中的另一个组件读取新值,当当前 DataFlow Task
执行完毕
有用的链接
如果您有兴趣以编程方式编辑包,您可以参考以下链接
- https://docs.microsoft.com/en-us/sql/integration-services/building-packages-programmatically/creating-a-package-programmatically
- https://docs.microsoft.com/en-us/sql/integration-services/building-packages-programmatically/working-with-variables-programmatically
- How to edit SSIS packages programatically in VB?