2012-12-03 41 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