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