我可以使用LIMIT N,M SQL Server数据库(Can I use LIMIT N,M o

2019-09-25 19:30发布

我有以下SQL语句:

SELECT [id], [name]
FROM [dbo.test_db_002] t1
LEFT JOIN [dbo.test_db_003] t2 ON t1.[id] = t2.[itmid]
ORDER BY t2.[iid] ASC;

这似乎很简单,但我不能弄明白。 我需要添加LIMIT N,M将其从第N一个检索m个,但我一直围绕“限”字得到错误。 我试图把那个LIMIT子句我到处可以在SQL语句中以上无济于事。

PS。 我正在写随VS2010的SQL Server。

Answer 1:

为了回答您的查询,您可能希望:(取决于你的价值观MN

WITH cte AS
(
   SELECT [id], [name], ROW_NUMBER() OVER (ORDER BY t2.[iid] ASC) AS rowNumber
   FROM [dbo.test_db_002] t1
   LEFT JOIN [dbo.test_db_003] t2 ON t1.[id] = t2.[itmid]
)
SELECT [id], [name]
FROM cte
WHERE rowNumber BETWEEN 3 AND 5

事情要留意,在之间的值BETWEEN N AND N + M

此外,这里的有关信息的链接公用表表达式这是WITH cte我用的语法。



Answer 2:

有没有直接等价于LIMIT N,M在SQL Server中,但你可以做这样的事情:

SELECT * FROM
  (SELECT *, ROW_NUMBER() OVER (ORDER BY name) as row FROM MyTable) a
WHERE row > 5 and row <= 10

看到这里的一些更多的信息: 在SQL Server“LIMIT”



Answer 3:

您可以使用ROW_NUMBER()

例:

select * from 
(
  select cola, colb, row_number() over (order by col1 desc) as row
  from table ) x
where row between value1 and value2


Answer 4:

与SQL Server 2012中的偏移限制:

SELECT email FROM myTable
OFFSET 10 ROWS
FETCH NEXT 10 ROWS ONLY;

//偏移 - 没有。 跳过的行

//下一个 - 不需要。 旁行



文章来源: Can I use LIMIT N,M on SQL Server database