2013-06-12 61 views
0

我正在尋找一個子查詢的數量,或者至少是一個方法。得到一個子查詢的計數

我有一個存儲過程,我稍後在其中創建一個臨時表,但我需要在該臨時表中返回的行數。

我得到臨時表的方式是從一個有少量連接的選擇。有什麼辦法可以獲得該select語句中返回的行數?

我有類似的東西:

SELECT Book.Title, 
     Book.Year, 
     BookGenre.Genre 
    FROM Book 
    JOIN BookGenre ON Book.BookNum = BookGenre.BookNum 
WHERE Book.Title IS NOT NULL 

,並在此之前,我需要得到將從該查詢返回的行數。所以,基本上是:

COUNT(SELECT Book.Title, 
      Book.Year, 
      BookGenre.Genre 
     FROM Book 
     JOIN BookGenre ON Book.BookNum = BookGenre.BookNum 
     WHERE Book.Title IS NOT NULL) 
+1

張貼代碼幫助:) –

+0

對不起,我已經添加了一些代碼作爲例子。 – rjbogz

回答

3

@@RowCount立即SELECT後會給你行數返回。

您可以獲取計數,然後重複查詢,或執行查詢並獲得計數。如果您需要在進一步處理數據之前使用計數,則可以將查詢結果定向到臨時表或表變量。

在某些情況下,運行查詢可能會很有幫助,但只保存需要的id以便稍後檢索完整數據。你的例子似乎並不是這些情況之一。

出於完整性:

反規範化是另一種選擇。例如,您可以使用觸發器來維護BookGenre表中各種流派的書數。

如果查詢代價高昂,重複並且可以容忍一定程度的陳舊數據,那麼維護結果緩存是另一種可能性。例如,網站主頁上的前十名單不需要是完全正確的。每5分鐘運行一次查詢可能足以保持貨幣幻覺。

小心避免過早優化。在開始研究優化之前,您應該有一個特定且可衡量的性能問題。

+0

我已經添加了一個代碼,用於我正在尋找的一個示例。 – rjbogz