我在ssis包中的Execute sql任务中有一个简单的sql查询, SELECT MAX(binindex) 来自dbo.myTable
我需要将此最大索引存储到变量中,然后将其传递给Script Task并显示它, 我已经声明了一个包变量,包编译,但每次都显示-1,我不知道我做错了什么,任何帮助都将不胜感激!
public void Main(){
//TODO: Add your code here
Dts.TaskResult = (int)ScriptResults.Success;
MessageBox.Show(Dts.Variables["User::BININDEX"].Value.ToString());
}
答案 0 :(得分:2)
好消息是,就我所见,你正在做的一切都是正确的。我重新创建了你的包,我从查询中得到了预期的值。
我也可以诱导你的情况 - 我的查询返回了正确的值,但是我的包产生了“错误的结果”。
我希望问题是你在不同的范围内定义了两个BININDEX变量。我最初的假设是包括作用域的包含值为-1,并且您有一个变量作用于具有相同名称的“执行SQL任务”。默认行为是创建作用于当前具有焦点的对象的变量。顺便说一下,这在2012版SQL Server中发生了变化。
由于图片显示包范围变量的设计时间值为123,因此您可能还有一个在脚本任务上定义的变量,其名称与BININDEX相同。局部变量将覆盖全局范围的变量
点击你的脚本任务,希望你会看到像上面那样定义的BININDEX。否则,我认为问题出在你的包中,你有BININDEX变量冲突。您可以尝试在Package Explorer中查找一个实例,其中列出了两个具有相同名称的变量。
我需要离开,但如果不是这种情况,请在执行SQL任务上添加一个PostExecute断点,然后查看您的Locals窗口(不是Variables,因为它只反映设计时值)。展开变量,您应该能够看到BININDEX的值。那是不对的?