【问题标题】:how to store sql query result in a variable and messegeBox如何将sql查询结果存储在变量和messegeBox中
【发布时间】:2012-06-11 20:57:55
【问题描述】:

我在 ssis 包中的 Execute sql 任务中有一个简单的 sql 查询, 选择最大值(binindex) FROM 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());
}

【问题讨论】:

  • dbo.MyTable中binindex列的数据类型是什么? SSIS 变量@[User::BININDEX] 的数据类型是什么?
  • 在 SSMS 中运行查询时是否得到相同的结果(我假设您不会问这个问题)
  • 能否发一张参数映射页面的截图?
  • 参数映射页为空白!!我什么都没有
  • 抱歉,我指的是常规选项卡。今天下午茶不够。对连接管理器类型和结果集属性感到好奇

标签: sql ssis


【解决方案1】:

好消息是,据我所知,您所做的一切都是正确的。我重新创建了您的包,并从查询中获得了预期值。

我也可以推断出你的情况——我的查询返回了正确的值,但我的包产生了“不正确的结果”。

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

由于您的图片显示包作用域变量的设计时值为 123,因此您也有可能在脚本任务上定义了同名 BININDEX 的变量。局部变量将覆盖全局范围的变量

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

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

【讨论】:

  • 谢谢,我很感激
猜你喜欢
  • 2014-04-24
  • 1970-01-01
  • 2012-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-29
相关资源
最近更新 更多