SQL Server , AutoIncrement anlegen mit ORDER BY oder ?

Fragen zu allen anderen Programmiersprachen.
Benutzeravatar
Rings
Beiträge: 971
Registriert: 29.08.2004 08:48

SQL Server , AutoIncrement anlegen mit ORDER BY oder ?

Beitrag von Rings »

ich hab mal ne tiefergehende Frage an die Datenbank-Spezialisten
unter euch hier im Forum.

Ob Wohl ich daraufhingewiesen habe das ein Primärschlüssel ein Muss ist,
wurde dieser nicht von Anfang an in einer Datenbank Tabelle angelegt.

Mittlerweile befinden sich >5 Mio Datensätze in der Tabelle.
Da geht ein 'Select ' und blättern in der Tabelle halt nicht so einfach ohne gescheihte ID.

Jetzt will ich nachträglich ein AutoIncrement-Feld 'MY_AUTO_ID' einfügen in die Tabelle,
das Netz listet mir auch Besipiele auf , zum Bsp:

Code: Alles auswählen

ALTER TABLE [Datenbank].[dbo].[Test_Table] add MY_AUTO_ID int identity(1,1)


Das geht auch soweit, allerding nicht in der Sortierreihenfolge wie ichs denn gerne hätte.
Eigentlich keine Sortierreihenfolge.

Ich benötige am besten eine die Nach DatumZeit sortiert ist.
In der Tabelle befindet sich noch ein DatumZeit-feld 'Zeit'.

Meine Frage nun:

Wie bekommt man es hin ein Autoincrement-Feld anzulegen, das die Sortierung nach
Datum/Zeit (ORDER BY ZEIT ) berücksichtigt ?

Erstmal ein Primärschlüssel für die 'Zeit' anlegen ?
Rings hat geschrieben:ziert sich nich beim zitieren
Benutzeravatar
Kiffi
Beiträge: 10621
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: SQL Server , AutoIncrement anlegen mit ORDER BY oder ?

Beitrag von Kiffi »

wäre das eine Lösung?

* temporäre Tabelle erstellen (mit allen Feldern Deiner Original-Tabelle + MY_AUTO_ID)

* Inhalt der Original-Tabelle in die temporäre Tabelle füllen (Insert Into Temp_Table ( Select * From Ori_Table Order by DatumZeit ))

* Original-Tabelle löschen

* Temp-Tabelle nach Original-Tabelle umbenennen

Grüße ... Peter
Hygge
CodeBurg
Beiträge: 101
Registriert: 06.06.2011 22:53

Re: SQL Server , AutoIncrement anlegen mit ORDER BY oder ?

Beitrag von CodeBurg »

Ich habe das so zwar noch nie gemacht, aber so wie Kiffi das aufgezeigt hat sollte es eigentlich funktionieren. Aufpassen musst du jedoch, falls auf der Tabelle z. B. irgendwelche Trigger oder Constraints vorhanden sind, diese würden beim einfach Kopieren bzw. anlegen einer Temp-Tabelle nicht mit kopiert und wären spätestens mit dem Löschen der Original-Tabelle weg. Daher würde ich mir vom ManagementStudio ein ChangeScript erstellen lassen. Dieses legt die gleiche Vorgehensweise wie von Kiffie beschrieben an den Tag, enthält jedoch auch die ganzen Anweisung zum Erstellen von Triggern, Constraints usw. Das Skript müsste dann nur noch um das Order by-Statement ergänzt werden.

Nachtrag:
Natrülich musst du auch dafür sorgen, dass die IDs nicht aus der alten Tabelle übernommen werden sondern gem. der neuen Order-Reihenfolge neu vergeben werden.
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8675
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Re: SQL Server , AutoIncrement anlegen mit ORDER BY oder ?

Beitrag von NicTheQuick »

Warum nicht einfach die neue Spalte hinzufügen und manuell per Skript in der richtigen Reihenfolge füllen? Danach AUTO_INCREMENT anpassen.
Bild
Benutzeravatar
Rings
Beiträge: 971
Registriert: 29.08.2004 08:48

Re: SQL Server , AutoIncrement anlegen mit ORDER BY oder ?

Beitrag von Rings »

Danke für eure Antworten.
Kiffis Vorschlag scheint mir am geignesten.


das Management studio führt grade die aktion aus.........


25 minuten zum kopieren,
aber es Klappt !!!!

thx nochmals
Rings hat geschrieben:ziert sich nich beim zitieren
Antworten