SQL Server 中是不是有等效的 SQL_CALC_FOUND_ROWS?

Posted

技术标签:

【中文标题】SQL Server 中是不是有等效的 SQL_CALC_FOUND_ROWS?【英文标题】:Is there an equivalent of SQL_CALC_FOUND_ROWS in SQL Server?SQL Server 中是否有等效的 SQL_CALC_FOUND_ROWS? 【发布时间】:2013-04-08 03:16:50 【问题描述】:

我有这个 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,我对此有疑问。 请帮帮我...

【问题讨论】:

【参考方案1】:

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

COUNT (*) OVER () AS ROW_COUNT

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

例如:

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

希望对你有帮助

【讨论】:

在 MSSQL Server 中没有限制,顺便说一句 太棒了!很长一段时间以来我一直在为此苦苦挣扎:)【参考方案2】:

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

我期待

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

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

【讨论】:

我需要 select count(*) from result where SeqValue>=20 and SeqValue 我不明白,你能显示几行你希望你的数据看起来像什么的吗,你说你想要标题和网址...行中还有什么,计数什么?【参考方案3】:

尝试:

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

【讨论】:

【参考方案4】:

我知道为时已晚,但对分页和限制很有帮助。

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 开始。

【讨论】:

以上是关于SQL Server 中是不是有等效的 SQL_CALC_FOUND_ROWS?的主要内容,如果未能解决你的问题,请参考以下文章

是否有 PostgreSQL 等效的 SQL Server 探查器?

Snowflake 中的 SQL Server 等效表类型是啥

是否有与 SQL Server NewId() 函数等效的 Access?

SQL Server 2005 中 Oracle 的 UTL_TCP 等效项

PHP、XAMPP、SQL SERVER 2012 中 array_push() 的等效 sqlsrv_

C# 等效于 SQL Server 中的 IsNull() 函数