mysql - SQL Server 中是否有等效的 SQL_CALC_FOUND_ROWS?

标签 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,我对此有疑问。 请帮助我...

最佳答案

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

COUNT (*) OVER () AS ROW_COUNT

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

例如:

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

希望对你有帮助

关于mysql - SQL Server 中是否有等效的 SQL_CALC_FOUND_ROWS?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16024824/

相关文章:

sql - MAX 与 Top 1 - 哪个更好?

java - 为什么我的 native 生成策略不只在 SQL Server 上创建 id?

sql - 在 SQL 中,如何在范围内输入 "group by"?

php - 需要更新 codeigniter 上的用户表密码字段

mysql - 如何从 SHOW ERROR MySQL 获取消息和错误代码

mysql - 在mysql中创建一个函数,如果存在的话

sql - 创建新表或在现有表中添加列哪个更好

mysql - Mean Stack -> Sequelize Mysql 关联

sql - 计算开始日期和当前日期之间的工作日

sql-server - 带有 ROW_NUMBER 的 SQL Server 存储过程