Heim >Datenbank >MySQL-Tutorial >Wie kann ich eine Nicht-Identitätsspalte in SQL Server 2005 mithilfe von ROW_NUMBER() automatisch erhöhen?

Wie kann ich eine Nicht-Identitätsspalte in SQL Server 2005 mithilfe von ROW_NUMBER() automatisch erhöhen?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-27 01:10:10878Durchsuche

How Can I Auto-Increment a Non-Identity Column in SQL Server 2005 Using ROW_NUMBER()?

Verwenden von ROW_NUMBER() ohne ORDER BY für die automatische Inkrementierung in SQL Server 2005

In SQL Server 2005 wird die automatische Inkrementierung eines nicht- Die Identitätsspalte kann eine Herausforderung darstellen, wenn mit ROW_NUMBER() gearbeitet wird und ein geeignetes ORDER BY-Kriterium fehlt. Es gibt jedoch Alternativen:

Verwendung von ROW_NUMBER() mit einer Constant Order By-Klausel:

Obwohl ein gültiges ORDER BY-Feld fehlt, kann ROW_NUMBER() mit kombiniert werden eine konstante Bestellklausel zur Nachahmung der automatischen Inkrementierung:

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

Diese Methode vermeidet eine explizite Reihenfolge und stellt gleichzeitig sicher Eindeutigkeit in der ID-Spalte.

Vorbehalt: Keine Garantie der ursprünglichen Reihenfolge:

Es ist wichtig zu beachten, dass dieser Ansatz nicht die Beibehaltung der ursprünglichen SourceTable-Reihenfolge garantiert . Andere Faktoren, wie z. B. ORDER BY einer äußeren Abfrage, können die Ergebnisreihenfolge beeinflussen.

Überlegungen zur Parallelität:

Sperrhinweise (TABLOCKX und HOLDLOCK) sind im enthalten Abfrage, um zu verhindern, dass gleichzeitige Prozesse zwischen den Abfrageausführungsschritten dieselbe ID einfügen. Dieser Ansatz ist jedoch nicht so effizient wie die Verwendung einer Identitätsspalte und sollte nur als Problemumgehung betrachtet werden.

Empfohlene Lösung: Identitätsspalte verwenden:

Für optimale Leistung und Parallelität wird dringend empfohlen, eine Identitätsspalte für die automatische Inkrementierung zu verwenden.

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

Stellungnahme:
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