Pobieranie danych - sql server - top i offset

0

Mam takie pytanie jaki jest najlepszy sposób pobierania danych z bazy do aplikacji? Chodzi mi o to, że teraz mam tak że pobieram sobie dane do tabelki i jest ok, ale problem pojewia się wtedy, gdy np mam z 5000 rekordów no i to nie jest optymalne rozwiązanie. Myślałem nad tym żeby zrobić jakiś podział na strony że pobierze mi 50 rekordów i potem następne itd. Tylko nie wiem jak to zrobić. Bo wiem jak zrobić to po stronie aplikacji tyle, że nadal mi pobierze te 5k. Myślałem żeby to zrobić po stronie sqla tylko nie wiem jak napisać taką procedurę, która by mi pobierała dane częściowo.

1

SELECT TOP 50 ... FROM TABELA?

3

Użyj jakiegoś ORM (np. EF) i użyj LINQ, nie będziesz musiał się męczyć z sql, który nie dość, że czasami toporny, to jeszcze koszmarny do refactoringu, aktualizacji, generalnie do utrzymania. Ponadto MSSQL bardzo utrudnia zrobienie offsetu, bo nie zapewnia wbudowanej funkcjonalności do tego (trzeba dodatkowo komplikować sql poprzez zamykanie właściwego zapytania w podzapytaniu z ROW_NUMBER() - https://stackoverflow.com/questions/2135418/equivalent-of-limit-and-offset-for-sql-server).
Z LINQ w C# zrobisz to poprzez query.Skip(offset).Take(amount).

0
ŁF napisał(a):

Ponadto MSSQL bardzo utrudnia zrobienie offsetu, bo nie zapewnia wbudowanej funkcjonalności do tego (trzeba dodatkowo komplikować sql poprzez zamykanie właściwego zapytania w podzapytaniu z ROW_NUMBER() - https://stackoverflow.com/questions/2135418/equivalent-of-limit-and-offset-for-sql-server).

Prehistoryczne wersje tak miały, ale od 2012 to jest wbudowane. Inna rzecz, że EF nie ogarniał tego przez 2,5 roku. :D

2

Ogarnąłem sobie coś takiego jak ktoś by może też szukał

select * from Patient order by id Asc OFFSET 10 ROWS FETCH NEXT 10 ROWS ONLY
0

O, a to mnie zaskoczyłeś, nie znałem tego skądinąd ważnego ficzera, a on już od wersji 2012 istnieje. Łap plusa misiu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1