Ich habe vor kurzem etwa 60.000 Datensätze in eine Tabelle importiert, die Daten in einer Tabelle mit Daten in einer anderen Tabelle in Beziehung setzt. Allerdings hat mein Client seither angefordert, dass eine Sortierreihenfolge zu allen 60k-Datensätzen hinzugefügt wird. Meine Hoffnung ist, es gibt eine nette, saubere Möglichkeit, diese Sortierreihenfolgen in einem SQL-Update automatisch zu generieren. Die fertigen Daten sollten etwa so aussehen:
%Vor%Kann das gemacht werden? Irgendwelche Vorschläge würden sehr geschätzt.
- Anne
Sie berühren hier etwas fundamentales über das relationale Modell. In Datenbanken gibt es im Allgemeinen keine intrinsische Ordnung. Wenn Sie eine Datenbestellung immer dann erhalten möchten, wenn Sie sich eine Tabelle ansehen, müssen Sie diese Reihenfolge explizit angeben.
In einem allgemeinen Sinn fragen Sie nach dem Unmöglichen. Sie können nicht nur UPDATE
einer Tabelle zuordnen und erhalten eine automatische Abfrage von jeder Abfrage, die Sie daran vornehmen. Aber in einem Abfrage-nach-Abfrage -Sinn könnten Sie immer " ORDER BY item1ID, sortOrder
" in jede SELECT
-Anweisung einfügen, die Sie auf die Tabelle anwenden.
In SQL Server 2005 können Sie eine Ansicht schreiben und sie Ihrem Client mit diesem alten Hack anzeigen:
%Vor%Es gibt Möglichkeiten, eine solche Ansicht aktualisierbar zu machen, aber Sie müssen das selbst herausfinden. Es ist nicht schwer zu tun.
Wenn Sie niemals Daten in diese Tabelle einfügen oder ändern möchten und Sie die Daten erneut in eine Tabelle importieren möchten, können Sie Ihre Tabelle mit einer Identität definieren und dann Ihre Daten in die Tabelle einfügen die entsprechende Reihenfolge. Dann würden Sie immer nach der einen Identitätsspalte bestellen. Dies würde funktionieren, wenn Ihr Client die Daten immer in einem Programm anzeigt, das die Sortierung nach einer einzelnen Spalte zulässt. (BTW, niemals die IDENTITY
Funktion für diesen Zweck verwenden. Es wird nicht funktionieren.)
Ich hoffe, das ist hilfreich. Tut mir leid, wenn ich pedantisch bin.
Theoretisch könnte man sagen:
%Vor%Das gibt Ihnen jedoch eine Fehlermeldung:
%Vor%Sie müssen es also tatsächlich in zwei Schritten tun - wählen Sie zuerst die Werte in einer temporären Tabelle aus und aktualisieren Sie dann Ihr Original aus der temporären Tabelle.
Zum Beispiel:
%Vor%Tags und Links sql sql-server-2005