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};
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!