gpt4 book ai didi

mysql - 将 MySQL 查询转换为 Microsoft SQL Server

转载 作者:行者123 更新时间:2023-11-29 00:32:16 24 4
gpt4 key购买 nike

我需要将此 MySQL 查询转换为 SQL Server 查询,其中语法 'LIMIT ?, ?' 是我的主要问题因为与 SQL Server 不兼容。

同时不知道SELECT FOUND_ROW()结尾的子句是什么意思。

我是数据库的新手,所以非常感谢任何帮助。

SELECT SQL_CALC_FOUND_ROWS TITLE, URL FROM SITE WHERE CITY='Berlin' LIMIT ?, ?

...

stmt.setInt(1, offset);
stmt.setInt(2, numRecords);

...

rs = stmt.executeQuery("SELECT FOUND_ROWS()");
if (rs.next())
this.noOfRecords = rs.getInt(1);

...

最佳答案

如果MySQL是:

SELECT URL
FROM SITE
WHERE CITY='Berlin'
LIMIT 30, 20

然后它返回第 31 行到第 50 行。在 SQL Server 中,您可以这样做:

WITH somerows AS (
SELECT TOP 50 URL, ROW_NUMBER() OVER (ORDER BY URL) AS SeqValue
FROM SITE
WHERE CITY='Berlin'
)
SELECT * FROM somerows
WHERE SeqValue BETWEEN 31 and 50

注意 SQL Server 查询中的 50 是 MySQL LIMIT 值的总和,而 MySQL 中的 30 为零-索引,因此它在 SQL Server 中变为 31,其中 ROW_NUMBER 计数器是单索引的。非常感谢 Kevin Suchlicki 在下面的评论中指出这一点。

另请注意,与 MySQL 查询不同,您必须使用 SQL Server 查询对行进行排序。

最后,SQL_CALC_FOUND_ROWS 是启用 FOUND_ROWS() 函数的 MySQL 关键字。在 documentation 中对此进行了解释.没有 SQL Server 等效项。您需要以其他方式计算行数以在您的代码中设置 this.noOfRecords,但您应该能够解决这个问题。

关于mysql - 将 MySQL 查询转换为 Microsoft SQL Server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15979814/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com