SQL Server中是否有等效的SQL_CALC_FOUND_ROWS?

时间:2013-04-15 21:16:11

标签: mysql sql-server tsql

我有这个mssql查询:

with RESULT as(select  TITLE, URL, ROW_NUMBER() over (order by URL) as SeqValue from WEBSITE 
select * from RESULT where SeqValue>=20 and SeqValue<=40 

我想知道如果where语句不在那里,这个查询会返回多少记录。 我尝试使用select count(*) from RESULT并尝试使用@@ROWCOUNT以及其他许多方式,但无效。 我需要选择TITLE和URL,最后我需要选择的总记录。

例如在mysql查询中,我使用SQL_CALC_FOUND_ROWS编写了prepareStatement:

select SQL_CALC_FOUND_ROWS TITLE, URL from WEBSITE limit ?, ?

and after this select i have:

select FOUND_ROWS()

在此示例中,返回值是mysql查询的总记录。 总记录与LIMIT相同且没有LIMIT指令。 我将数据库从mysql转换为mssql,我有这个问题。 请帮帮我......

4 个答案:

答案 0 :(得分:9)

在尝试从MySQL迁移到SQL SERVER时,我也有同样的担忧 解决方案是在您的查询中注入:

COUNT (*) OVER () AS ROW_COUNT

ROWCOUNT出现在结果的所有行中,然后它只剩下你从第一行结果中检索ROW_COUNT(如果存在)并且不要忘记重置结果指针et Voila; - )。

例如:

select COUNT (*) OVER () AS ROW_COUNT, URL from WEBSITE limit ?, ?

我希望它会有所帮助

答案 1 :(得分:0)

“结果”将包含网站中的每条记录,对吗?所以只需“从网站选择计数(*)”。

我希望

 with result as(...what you have...)
 select count(*) from result;

也要工作,做一些不必要的工作。你不想做什么?

答案 2 :(得分:0)

尝试:

declare @row_count int
select @row_count = count(*), URL from WEBSITE limit ?, ?
select @row_count

答案 3 :(得分:0)

我知道为时已晚,但可以通过分页和限制来提供帮助。

WITH paging AS (SELECT ROW_NUMBER() OVER(ORDER BY {$sortField} {$sortOrder}) as rowId, count(1) over() as ROW_COUNT, key FROM {$table})
SELECT * FROM {$table} result INNER JOIN paging ON result.key = paging.key WHERE rowId BETWEEN {$start} and {$end}

它具有排序字段的属性,排序顺序和键用于连接原始表。开始和结束是您的分页值。

现在,ROW_COUNT字段中包含必填字段的记录总数。它也从1开始而不是从0开始。