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)
4

1 回答 1

3

@@RowCount之后立即SELECT会给你返回的行数。

您可以获取计数然后重复查询,或者执行查询并获取计数。如果您需要在进一步处理数据之前使用计数,可以将查询结果定向到临时表或表变量。

在某些情况下,运行查询可能会有所帮助,但只保存稍后检索完整数据所需的 id。您的示例似乎不是其中一种情况。

为了完整性:

非规范化是另一种选择。例如,您可以使用触发器来维护BookGenre表中每种类型的书籍数量的计数。

如果查询代价高昂、重复并且您可以容忍一定程度的陈旧数据,则维护结果缓存是另一种可能性。例如,网站主页上的前十名列表不需要完全正确。每 5 分钟运行一次查询可能足以保持货币错觉。

小心避免过早优化。在开始研究优化之前,您应该有一个特定且可衡量的性能问题。

于 2013-06-12T19:47:23.653 回答