2010-02-04 45 views
4

場景:我需要從Visual FoxPro數據庫中提取信息;然而,針對此問題運行大量查詢有一個鎖定系統的趨勢。爲了解決這個問題,我們設置了一些限制,如果查詢超過了一定的時間,就會取消查詢,並限制返回的行數。SQL - 返回有限的行數,但是全行數

有沒有辦法用「SELECT TOP ###」進行查詢,還要返回通過語句找到的實際行數?或者是兩次運行查詢的唯一方法? (原因是我們仍然可以讓查詢運行,但通知用戶發生了什麼,即「### found items顯示的第一個###」)。

我最初的試驗只是簡單地向該語句的選擇部分添加一個「COUNT(*)」,但這並沒有完全實現我正在查找的內容(它返回了正確的行數,但只是爲其餘數據返回一行)。

+0

沒有FOXPRO已經停產? – 2010-02-04 14:38:55

+0

直到2014年,微軟將支持Visual FoxPro 9 SP2。 – 2010-02-05 11:31:42

回答

2

如果我理解正確的問題,你可以做一個子查詢,但是那將意味着你撥打每一行計數SQL返回:

select top 10 field1, field2, (select count(*) from table) as totalrows from table 

這會給你一個額外的列前10行在每個被調用的totalrows中,包含表中所有行的計數。

個人而言,我只是運行一個單獨的查詢,以獲得頂部n行和計數。

+0

這就是我的想法,但我希望有一種方法可以在單個查詢中做到這一點 – John 2010-02-04 15:29:16

+0

如何在分隔變量中選擇它,比如@myRowsCount = Select從表 計算COUNT(*),然後將其放在如下查詢中: select top 10 field1,field2,@myRowsCount as totalrows from table – 2010-09-17 09:32:08

2

您需要運行2個獨立的SELECT。一個用於檢索查詢返回的COUNT行,然後返回特定頁面的記錄子集。

你可以只取出總計數一次,當第一「頁面」被檢索優化這個(即不做後續頁上整個計數)