【问题标题】:SQL Server While Loop return results as they are foundSQL Server While 循环返回找到的结果
【发布时间】:2012-12-03 20:59:31
【问题描述】:

我有一个我编写的 SQL 脚本,它可以帮助我搜索数据库模式以查找是否使用了某些列(即非空、非零长度字符串等)以及它们最流行的值是什么。

我真的希望能够返回在循环中找到的结果,因为完成整个搜索可能需要一段时间。有没有办法以这样的方式返回结果,在 VB.NET 端,当它尝试执行 SqlDataReader.Read 时,它会看到结果?

因为现在,我将结果存储在临时表中并在最后返回临时表。

谢谢!

【问题讨论】:

  • 没有使用 CLR 并创建一个流式结果集,它在接收记录时发送数据,我认为最好的方法是创建一个全局临时表(例如,##temp)并有一个辅助进程来显示全局临时表中的值/记录。

标签: sql-server tsql ado.net


【解决方案1】:

当它是一个单一的 SQL 脚本时不是,不 - 调用者将在继续之前等待完整的结果集。

但是,您可以将其分解为几个步骤,如下所示:

  • 进行初始查找,列出您可能感兴趣的所有列
  • 将这些结果返回给 VB.NET
  • 对于这组中的每个结果,运行其余的流程以获取您真正感兴趣的值。循环遍历第一步中的每个结果
  • 当您收到每个数据集合时,您可以根据需要选择对其进行处理。分拆一个新线程,例如,做一些额外的处理。

因此,如果它是一个单一的 T-SQL 脚本,您将无法运行它并一次返回结果 - 但如果您能够分解它并在 .NET 中而不是在 SQL 中执行循环,那么您'将可以访问每个步骤的结果。

【讨论】:

  • 我就是这么想的。谢谢。在我检索到模式的第一个结果集(非常快)之后,当我在 .NET 中循环检查每个列的使用情况时,最好使用一个 SQLConnection 对象,对吧?每次为每列断开并重新连接以检查其使用情况可能是一个主要的瓶颈,对吧?
  • 这不会很重要,因为连接协商非常快 - 但是,根本不需要断开连接,因此在循环中的每个步骤重复使用相同的连接是有意义的。作为一个习惯点,我通常将我的数据连接代码包装在我定义 SqlConnection 的“Using”语句中,因为这会在编译时在 finally 块中为您添加关闭/处置代码。
猜你喜欢
  • 2013-12-18
  • 2021-09-24
  • 2016-07-22
  • 2019-06-07
  • 2020-03-01
  • 2021-04-19
  • 2013-10-27
  • 2018-10-28
  • 1970-01-01
相关资源
最近更新 更多