J'ai cette requête à mysql :
select * from table1 LIMIT 10,20
Comment puis-je le faire avec Microsoft sql ?
J'ai cette requête à mysql :
select * from table1 LIMIT 10,20
Comment puis-je le faire avec Microsoft sql ?
À partir de SQL SERVER 2005, vous pouvez le faire...
USE AdventureWorks;
GO
WITH OrderedOrders AS
(
SELECT SalesOrderID, OrderDate,
ROW_NUMBER() OVER (ORDER BY OrderDate) AS 'RowNumber'
FROM Sales.SalesOrderHeader
)
SELECT *
FROM OrderedOrders
WHERE RowNumber BETWEEN 10 AND 20;
ou quelque chose comme ça pour l'an 2000 et au-dessous de versions...
SELECT TOP 10 * FROM (SELECT TOP 20 FROM Table ORDER BY Id) ORDER BY Id DESC
C'est presque un double d'une question que j'avais posée en octobre: http://stackoverflow.com/questions/216673/emulate-mysql-limit-clause-in-microsoft-sql-server-2000
Si vous utilisez Microsoft SQL Server 2000, il n'y a pas de bonne solution. La plupart des gens ont recours à la capture du résultat de la requête dans une table temporaire avec un IDENTITY
clé primaire. Alors la requête à l'encontre de la colonne de clé primaire à l'aide d'un BETWEEN
condition.
Si vous utilisez Microsoft SQL Server 2005 ou plus tard, vous avez un ROW_NUMBER()
de la fonction, de sorte que vous pouvez obtenir le même résultat, mais éviter de la table temporaire.
SELECT t1.*
FROM (
SELECT ROW_NUMBER OVER(ORDER BY id) AS row, t1.*
FROM ( ...original SQL query... ) t1
) t2
WHERE t2.row BETWEEN @offset+1 AND @offset+@count;
Vous pouvez aussi écrire cela comme une expression de table commune , comme indiqué dans @Leon Tayson de réponse.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.