5

我有这个 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许多其他方式,但没有奏效。我需要选择的标题和 URL,最后我需要选择的总记录。

例如,在 mysql 查询中,我有 prepareStatement 使用SQL_CALC_FOUND_ROWS

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

4 回答 4

11

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

COUNT (*) OVER () AS ROW_COUNT

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

例如:

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

我希望它会有所帮助

于 2013-05-23T10:27:37.237 回答
0

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

我希望

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

也要工作,做一些不必要的工作。那不是你想要的吗?

于 2013-04-15T21:26:17.947 回答
0

尝试:

declare @row_count int
select @row_count = count(*), URL from WEBSITE limit ?, ?
select @row_count
于 2013-04-16T16:01:28.980 回答
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}

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

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

于 2018-06-07T10:28:44.883 回答