如何将sql查询结果存储在变量和消息框中

时间:2012-06-11 20:57:55

标签: sql ssis

enter image description here

我在ssis包中的Execute sql任务中有一个简单的sql查询, SELECT MAX(binindex) 来自dbo.myTable

我需要将此最大索引存储到变量中,然后将其传递给Script Task并显示它, 我已经声明了一个包变量,包编译,但每次都显示-1,我不知道我做错了什么,任何帮助都将不胜感激!

enter image description here

public void Main(){
    //TODO: Add your code here
    Dts.TaskResult = (int)ScriptResults.Success;
    MessageBox.Show(Dts.Variables["User::BININDEX"].Value.ToString());
}

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:2)

好消息是,就我所见,你正在做的一切都是正确的。我重新创建了你的包,我从查询中得到了预期的值。

Basic package

我也可以诱导你的情况 - 我的查询返回了正确的值,但是我的包产生了“错误的结果”。

negative one

我希望问题是你在不同的范围内定义了两个BININDEX变量。我最初的假设是包括作用域的包含值为-1,并且您有一个变量作用于具有相同名称的“执行SQL任务”。默认行为是创建作用于当前具有焦点的对象的变量。顺便说一下,这在2012版SQL Server中发生了变化。

由于图片显示包范围变量的设计时间值为123,因此您可能还有一个在脚本任务上定义的变量,其名称与BININDEX相同。局部变量将覆盖全局范围的变量

variables window

点击你的脚本任务,希望你会看到像上面那样定义的BININDEX。否则,我认为问题出在你的包中,你有BININDEX变量冲突。您可以尝试在Package Explorer中查找一个实例,其中列出了两个具有相同名称的变量。

package explorer

我需要离开,但如果不是这种情况,请在执行SQL任务上添加一个PostExecute断点,然后查看您的Locals窗口(不是Variables,因为它只反映设计时值)。展开变量,您应该能够看到BININDEX的值。那是不对的?

enter image description here