Laden...

SQL: Den X. Zeile einer Tabelle finden

Erstellt von thore.fiedermann vor 14 Jahren Letzter Beitrag vor 14 Jahren 2.159 Views
thore.fiedermann Themenstarter:in
30 Beiträge seit 2007
vor 14 Jahren
SQL: Den X. Zeile einer Tabelle finden

verwendetes Datenbanksystem: MS SQL Server 2008

Hallo!
Wie rufe ich mir aus einer Tabelle mit z.B. 100 Einträgen die 50. Zeile ab? Die Tabelle hat keine fortlaufende Id, weil zwischendurch immer wieder Daten gelöscht werden können oder Daten gefiltert werden.
Genauer gesagt brauche ich sogar eine gewisse Anzahl von Zeilen, ab einem bestimmten Eintrag in der Tabelle: 16 Einträge ab dem 50. Eintrag in der Tabelle. Mit der X. Zeile würde ich da aber auch alleine Weiter kommen.
Die Tabelle kann sehr groß werden. Aus Performancegründen wollte ich daher keine temporäre Tabelle mit einem künstlichen fortlaufenden Schlüssel benutzen...

Hoffe ich hab das Problem gut genug beschrieben. Danke für die Hilfe!

Gelöschter Account
vor 14 Jahren

Wie rufe ich mir aus einer Tabelle mit z.B. 100 Einträgen die 50. Zeile ab?

mit "TOP 50" und dann den letzen eintrag.

dein system ist allerdings schlimmer als suboptimal.... dein vorhaben ist sogar noch schlimmer.

was ganu willst du erreichen? paging in einer view? eine tabelle ohne fortlaufenden PK ist grauenhaft langsam... da die tabelle ohnehin wachsen kann ist allein das schon äußerst bedenklich.

2.891 Beiträge seit 2004
vor 14 Jahren

16 Einträge ab dem 50. Eintrag in der Tabelle.

In LINQ heißen die Stichworte "Skip" und "Take".

var result = items.Skip(49).Take(16);

Auf z.B. SKIP and TAKE ‘N’ number of records in a SQL Server Select Query | Sql Server Blog steht, wie man das auf dem SQL-Server realisieren kann.

Gruß,
dN!3L

U
237 Beiträge seit 2007
vor 14 Jahren

Gibts bei MSSQL kein LIMIT?

Unter MySQL wäre das Statement:

SELECT * FROM tabelle WHERE [Bedingung] LIMIT 50,16

heute code ich, morgen debug ich und übermorgen cast ich die königin auf int

thore.fiedermann Themenstarter:in
30 Beiträge seit 2007
vor 14 Jahren

@JAck30lena: Meine Tabelle enthält zwar einen fortlaufenden Schlüssel. Allerdings können Daten zwischendurch gelöscht werden. Damit entstehen automatisch Lücken. Und ja: ich will bei einer großen Tabelle immer nur die Daten der aktuell angezeigten Seite in ein DataGridView laden (aufwendige Bearbeitung der Daten: Multi-Lingual, Bilder, abhängige Daten aus anderen Tabellen).

@unclesam: Nein, es gibt kein LIMIT bei MSSQL. Leider hat sich Microsoft da mal an die Konventionen gehalten.

@dN!3L: Danke. Der Artikel beschreibt genau, was ich erreichen will. Jetzt muss sich nur noch heraus stellen, ob dieses Vorgehen auch bei einer gefüllten Tabelle noch die nötige Performance zeigt 😉

2.891 Beiträge seit 2004
vor 14 Jahren

Genauer gesagt brauche ich sogar eine gewisse Anzahl von Zeilen, ab einem bestimmten Eintrag in der Tabelle

Dir ist aber schon bewusst, dass die Zeilen einer Tabelle keine festgelegte Reihenfolge haben (und als Menge, also ohne Ordnungsrelation, betrachtetet werden müssen)?

Gruß,
dN!3L

F
10.010 Beiträge seit 2004
vor 14 Jahren

Deswegen hat MS ja ab dem SqlServer 2005 Pageing implementiert.

[C#] - Daten von SQL-Server schrittweise laden .. wie??

Der Part von jelly

thore.fiedermann Themenstarter:in
30 Beiträge seit 2007
vor 14 Jahren

@dN!3L: Mir ist schon klar, dass ich ohne Sortierung irgendwas bekomme. Ich habe wie gesagt auch einen fortlaufenden Schlüssel, aber er ist im Laufenden betrieb nicht ohne Lücken.

@FZelle: Paging sagt mir jetzt als Funktion von SqlServer nichts... Meinst Du die Methode über Row_Number und OVER?! Die benutze ich ja jetzt auch (Erste Antwort von dN!3L)...