2011-02-07 32 views
1

假設我有一個返回10000行的查詢。是否有可能在SQL Server中配置此查詢,以便每個數據塊返回1000行的結果?所以我的應用程序收到1000行,處理它們,並且儘管SQL Server正在努力發送下一個1000行等。在SQL Server中以塊的形式提取結果集

這是SQL Server 2005中

回答

3

SQL服務器給你一個結果集,它是作爲一種網絡數據包流(假設你使用TCP/IP連接到服務器)。

所以,如果你想真正核心,你可以實現有線協議通過網絡訪問SQL Server,然後在TCP流上工作。然而,這將是一項重大的工作,並不是真正可取的。

另一種可能性是查詢不是一次,而是使用多個查詢,其中每個查詢都會得到結果集的某個「窗口」。這被稱爲「服務器端分頁」。有關如何完成的說明,請參閱this文章。

另一種方法是在客戶端使用基於流的訪問。例如,如果您使用ADO.NET作爲客戶端,則可以使用SqlDataReader一次獲取一行(在後臺數據仍然通過網絡以塊的形式交付,但對您而言這是透明的)。但這取決於你使用的客戶,你沒有指定。

+0

會有服務器端分頁和幾個調用只是爲了在客戶端把它們放在一個列表中有任何意義嗎?我們只做一個較大的調用並返回該列表,而不是僅僅調用一個巨大的調用,而是將較小的調用附加到列表中,然後返回該列表。這可以改善響應時間和/或內存使用情況嗎?所以在較小的呼叫之間確實沒有處理。 – KTrum 2011-02-07 16:32:00