我希望获得一个子查询的计数,或至少绕过它。
我有一个存储过程,我稍后会在其中创建临时表,但我需要在该临时表中返回的行数。
我获取临时表的方式来自具有少量连接的选择。有没有办法获得该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)
答案 0 :(得分:3)
@@RowCount
将为您提供返回的行数。
您可以获取计数然后重复查询,或执行查询并获取计数。如果您需要在进一步处理数据之前使用计数,则可以将查询结果定向到临时表或表变量。
在某些情况下,运行查询可能会有所帮助,但只保存稍后检索完整数据所需的ID。你的例子似乎不是这种情况之一。
为了完整性:
非规范化是另一种选择。例如,您可以使用触发器来维护SELECT
表中每个类型的书籍数量。
如果查询很昂贵,重复并且您可以容忍一定程度的陈旧数据,那么维护结果缓存是另一种可能性。例如,网站主页上的前十名列表不需要精确正确。每5分钟运行一次查询可能足以保持货币的错觉。
小心避免过早优化。在开始研究优化之前,您应该有一个特定且可衡量的性能问题。