Heim > Datenbank > MySQL-Tutorial > Warum überspringt meine SQL Server 2012-Identitätsspalte Werte?

Warum überspringt meine SQL Server 2012-Identitätsspalte Werte?

Mary-Kate Olsen
Freigeben: 2025-01-18 02:39:10
Original
968 Leute haben es durchsucht

Why Does My SQL Server 2012 Identity Column Skip Values?

Identitätsspaltenlücken in SQL Server 2012: Fehlerbehebung und Lösungen

Die automatisch inkrementierenden Identitätsspalten von SQL Server 2012 zeigen manchmal unerwartetes Verhalten und überspringen Werte – zum Beispiel springen sie beim siebten Einfügen direkt von 6 auf 1000. Dieser Artikel untersucht die Ursachen und bietet wirksame Lösungen.

Das Problem verstehen

Das unregelmäßige Inkrementverhalten ist auf die Einführung von Sequenzen für die Identitätswertgenerierung in SQL Server 2012 zurückzuführen. Diese Änderung wirkt sich auf die Zuweisung von Identitätsschlüsseln aus:

  • Internes Werte-Caching: Sequenzen nutzen Caching zur Leistungsoptimierung, indem sie einen Wertebereich vorab zuweisen.
  • Masseneinfügungen: Das gleichzeitige Einfügen mehrerer Zeilen kann zu Lücken führen. Die Sequenz weist einen Zahlenblock zu; Nicht verwendete Werte innerhalb dieses Blocks führen zu Sprüngen, wenn nicht alle sofort verbraucht werden.

Das Problem lösen

Mehrere Ansätze können dieses Problem beheben und sequentielle Identitätsspalteninkremente sicherstellen:

Methode 1: Caching deaktivieren

Um das Verhalten vor 2012 wiederherzustellen, deaktivieren Sie das Caching mit diesen Befehlen:

<code class="language-sql">ALTER DATABASE [YourDatabase] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO
ALTER TABLE [TableWithIdentity] ADD PRIMARY KEY ([ColumnName]) WITH (IDENTITY(1, 1));
GO
ALTER DATABASE [YourDatabase] SET MULTI_USER;</code>
Nach dem Login kopieren

Methode 2: Verwendung des Trace-Flags 272

Aktivieren Sie das Trace-Flag 272, um jeden generierten Identitätswert zu überwachen. Diese detaillierte Protokollierung kann Probleme mit dem Sequenz-Caching-Mechanismus lokalisieren.

Methode 3: Verwendung einer NO CACHE Sequenz

Erstellen Sie einen Sequenzgenerator, der explizit ohne Caching konfiguriert ist (NO CACHE). Dies garantiert eine streng sequentielle Inkrementierung und verhindert Lücken.

<code class="language-sql">CREATE SEQUENCE [YourSequenceName] AS INT
START WITH 1 INCREMENT BY 1 NO CACHE;
ALTER TABLE [TableWithIdentity] ADD PRIMARY KEY ([ColumnName]) WITH (IDENTITY(1, 1));
GO</code>
Nach dem Login kopieren

Durch die Implementierung dieser Lösungen können Sie das erwartete Verhalten Ihrer SQL Server 2012-Identitätsspalten beibehalten und so Dateninkonsistenzen und -lücken verhindern.

Das obige ist der detaillierte Inhalt vonWarum überspringt meine SQL Server 2012-Identitätsspalte Werte?. 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