2013-06-12 42 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