Próbuję zrobić coś takiego:LIMIT 10..20 w SQL Server
SELECT * FROM table LIMIT 10,20
lub
SELECT * FROM table LIMIT 10 OFFSET 10
ale przy użyciu SQL Server
Jedynym solution I found wygląda jak overkill:
SELECT * FROM (
SELECT *, ROW_NUMBER() OVER (ORDER BY name) as row FROM sys.databases
) a WHERE row > 5 and row <= 10
Ja też found:
SELECT TOP 10 * FROM stuff;
... ale to nie to, co chcę zrobić, ponieważ nie można określić limit początkowy.
Czy jest inny sposób, aby to zrobić?
Co ciekawe, czy istnieje powód, dla którego serwer SQL nie obsługuje funkcji LIMIT
lub czegoś podobnego? Nie chcę być wredny, ale to naprawdę brzmi jak coś, czego DBMS potrzebuje ... Jeśli tak, to przepraszam za bycie tak nieświadomym! Pracuję z MySQL i SQL + przez ostatnie 5 lat, więc ...
Korzystanie CTE dla 'ROW_NUMBER()' oraz ograniczenie z 'TOP' dla osób szerokość zakresu i warunek "WHERE" dla granicy zakresu jest najlepszy, jaki udało mi się osiągnąć. Zauważyłem także znacznie lepszą wydajność, jeśli klauzula 'TOP' używa literału zamiast zmiennej – Jodrell
Problem z jakimkolwiek rozwiązaniem obejmującym ROW_NUMBER() jest taki, że jeśli nie wiesz z góry, jakie kolumny będziesz miał, a ty mieć złączenia, a połączone tabele mają tę samą nazwę kolumny, otrzymasz "Kolumna" xxx "została określona wiele razy". To nie jest tak rzadkie, jak mogłoby początkowo brzmieć. Używam Dappera, a moje tabele mają kolumnę Id. Dapper dzieli i mapuje na tym, więc nie chcę ich zmieniać, ale nie mogę użyć aliasu SELECT * FROM ([original query]). Jeszcze nie znalazłem rozwiązania! –
Możliwy duplikat [Jak wdrożyć LIMIT z Microsoft SQL Server?] (Https://stackoverflow.com/questions/603724/how-to-implement-limit-with-microsoft-sql-server) – kenorb