Heim > Datenbank > MySQL-Tutorial > Wie kann ich eine Nicht-Identitätsspalte in SQL Server 2005 automatisch ohne ORDER BY erhöhen?

Wie kann ich eine Nicht-Identitätsspalte in SQL Server 2005 automatisch ohne ORDER BY erhöhen?

Mary-Kate Olsen
Freigeben: 2024-12-30 02:59:24
Original
992 Leute haben es durchsucht

How to Auto-Increment a Non-Identity Column in SQL Server 2005 Without ORDER BY?

Generieren von Auto-Inkrement-IDs in SQL Server 2005 ohne ORDER BY

Die Notwendigkeit, Daten aus einer Tabelle in eine andere einzufügen und dabei automatisch zu inkrementieren Eine Nichtidentitätsspalte kann eine Herausforderung sein. Der Standardansatz besteht darin, einen Cursor zu verwenden oder eine Tabellenvariable zu erstellen, aber diese können ineffizient sein.

Wenn kein legitimes ORDER BY-Feld vorhanden ist, kann die Funktion ROW_NUMBER verwendet werden. Das Fehlen einer expliziten Reihenfolge garantiert jedoch nicht die Beibehaltung der ursprünglichen Datenreihenfolge. Dies liegt daran, dass sich „nicht bestellt“ von „ursprüngliche Reihenfolge beibehalten“ unterscheidet.

Um dieses Problem zu beheben, besteht eine Lösung darin, eine explizite Bestellung wie folgt zu vermeiden:

INSERT dbo.TargetTable (ID, FIELD)
SELECT
   Row_Number() OVER (ORDER BY (SELECT 1))
      + Coalesce(
         (SELECT Max(ID) FROM dbo.TargetTable WITH (TABLOCKX, HOLDLOCK)),
         0
      ),
   FieldValue
FROM dbo.SourceTable
WHERE {somecondition};
Nach dem Login kopieren

Dieser Ansatz berechnet die max ID und fügt Daten ein, während Sperren erworben werden, um Parallelitätsfehler zu vermeiden.

Beachten Sie jedoch, dass die Verwendung einer Identitätsspalte dringend empfohlen wird, da dadurch die Notwendigkeit von Sperren entfällt sorgt für optimale Parallelität. Identitätsspalten bieten eine effizientere und robustere Lösung für die automatische Inkrementierung von IDs in SQL Server.

Das obige ist der detaillierte Inhalt vonWie kann ich eine Nicht-Identitätsspalte in SQL Server 2005 automatisch ohne ORDER BY erhöhen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage