2012-12-03 43 views
0

我有一个SQL脚本,我写了帮助我搜索数据库模式以查找是否使用某些列(即非空,不是零长度的字符串等)以及他们最受欢迎的价值是什么。SQL Server while循环返回结果,因为它们被发现

我真的很想在循环中找到结果,因为它可能需要一段时间才能完成整个搜索。有没有办法以这样的方式返回结果,在VB.NET方面,它会看到结果,因为他们发现它试图做SqlDataReader.Read

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

谢谢!

+1

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

回答

1

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

但是,你就能把它变成了几步,就像这样:

  • 做出初步查找,在那里你列出所有的列,你可能会感兴趣的
  • 返回这些结果VB.NET
  • 对于此集合中的每个结果,运行剩余的过程以获取您实际感兴趣的值。循环遍历每个结果从第一步开始
  • 当您收到每个数据集合时,可以选择如果你愿意,可以用它做点什么。例如,分离一个新线程来做一些额外的处理。

所以,如果它是一个单一的T-SQL脚本,你一直在运行它并返回结果 - 但是如果你能够分解它并在.NET内部而不是内部执行循环SQL,您将可以在每一步访问结果。

+0

这就是我的想法。谢谢。在我检索模式的第一个结果集(非常快)之后,当我在.NET中循环检查每个列的用法时,最好使用一个SQLConnection对象,对吧?断开并重新连接每一列以检查其使用情况可能是一个主要瓶颈,对吧? – John

+0

这不会很重要,因为连接协商非常快 - 但是,根本没有必要断开连接,因此在循环中的每个步骤重复使用相同的连接是有意义的。作为一种习惯,我通常在我定义SqlConnection的“使用”语句中包装数据连接代码,因为它会在编译时在Finally块中为您添加关闭/处理代码。 – SqlRyan

+0

很酷,很高兴知道。 – John