2016-04-06 20 views
-2

Ich habe eine C# -Anwendung und verwendet SQL Server LocalDb-Datenbank, wie ich weiß.Identität automatisches Springen in SQL Server LocalDb

Einmal habe ich meine Datenbank an SQL Server 2012 angeschlossen und dann gelöst. Nun teilte mir einer meiner Benutzer mit, dass die Tabellen-ID von 36 auf 1036 gesprungen war. Danach habe ich die Benutzerdatenbank wieder auf Neu geändert, sie sprang von 2 auf 1003.

Ich sehe viele Lösungen für dieses Problem, aber ich denke nicht Ich habe dieses Problem zu meinem alten Benutzer, dass sie alte Version und Datenbank haben. Meine neuen Benutzer haben dieses Problem auch nicht SQL Server 2012 auf System, nur LocalDb.

Denkst du, wenn ich die ganze Datenbank entferne und eine neue aus C# erstelle, kann es mir helfen oder nicht?

+0

Dies ist ein häufiges Problem, wenn Sie eine Datenbank mit vorhandenen Daten anfügen und dann einfügen. Eine Möglichkeit, dies zu beheben, besteht darin, das Schema nur ohne die Daten anzuhängen, falls es nicht so wichtig für Sie ist. Sie können die lokale Datenbank immer skripten und sie in Ihrer neuen Datenbank ausführen. –

+0

Wenn ich neue Datenbank erstellen helfe mir oder nicht –

+0

Besser, die Datenbank so zu gestalten, dass so ein kleines Problem keine Rolle spielt. Wenn Ihre IDs nicht "smallint" sind, stehen Ihnen 2.147.483.647 IDs zur Verfügung. –

Antwort

0

Es kann einige andere Gründe für diese ID-Lücken geben, möglicherweise aufgrund eines automatischen Serverneustarts nach der Installation eines Updates.

können Sie unter zwei Möglichkeiten nutzen

Verwenden Trace-Flag 272 o Das wird ein Protokolleintrag führen für jede generierte Identitätswert generiert werden. Die Leistung der Identitätsgenerierung kann durch Aktivieren dieses Ablaufverfolgungsflags beeinträchtigt werden. einen Sequenzgenerator mit dem NO-Cache verwenden

Einstellung Einstellung Trace Flag 272 auf SQL Server 2012, die Sie hier

Open "SQL Server Configuration Manager"

  1. Klicken Sie auf "SQL Server Services" erwartet auf der linken Seite
  2. Rechtsklick auf Ihrem Namen Server-Instanz SQL auf dem rechten Bereich -> Standard: SQL Server (MSSQLSERVER)
  3. klicken Sie auf "Eigenschaften"
  4. Klicken Sie auf "Startparameter"
  5. Auf der Textbox Typ "einen Startparameter angeben" "-T272"
  6. Klicken Sie auf "Hinzufügen"
  7. die Änderungen bestätigen
+0

Kein Problem ist, dass meine Identität springt von 3 bis 1004 –

+0

liebe @Ryan Riel ich habe SQL lokalen db 2012 auf meinem Kunden pc –

+0

ich habe keine SQL Server Konfigurationsmanager in meinem Client pc seine nur sql lokalen db 2012 –

0

Es können 2 unten Szenario ....

  1. erhalten Sie jedes Mal 1000 Sprung (I für jeden Datensatz meinen Sie einfügen), dann gehen Sie von Tabelle zu entwerfen und überprüfen für „ID-Schrittweite“ und „Ident Wenn Sie irgendwann diesen Sprung (irgendeine Zufallszahl) bekommen, dann versuchen Sie, einen Datensatz in die Tabelle einzufügen, aber es schlägt fehl, so dass für jeden Fehlereinsatz der Identitätswert um 1 erhöht wird .

Dank Ravi

+0

Lieber Ravi ich überprüfe diese zwei Option seine richtige einige Zeit seinen Sprung von 36 bis 78 für einige Benutzer seine diffrent –

+0

so sieht aus wie Sie versuchen, den Datensatz in der gleichen Tabelle einfügen, aber es ist vor dem eigentlichen Einfügen fehlgeschlagen – Ravi

+0

Sie können noch eine Sache tun, richtig Klicke auf Tabelle und suche nach "Abhängigkeiten anzeigen", vielleicht bekommst du eine Idee. – Ravi

0

Dies ist die Art und Weise SQL Server funktioniert jetzt. Es reserviert einen Pool von 1000 IDs für jeden Tisch beim Start. Jede der reservierten Identitäten, die beim Herunterfahren nicht verwendet werden, wird verworfen, und beim Start wird ein neuer Pool von IDs reserviert.

Wenn Sie wirklich sequentielle Identitäten benötigen, können Sie eine Identitätstabelle erstellen, in der Sie die generierten IDs steuern.Es ist nicht der schönste oder vorzuziehende Weg, sondern gibt dir mehr Kontrolle über Identitäten. Ein Vorteil ist, dass es Ihnen einige interessante Möglichkeiten zur Identitätsgenerierung bietet. Angenommen, Sie müssen eine inkrementelle Zahl generieren, beginnend mit 1 für jeden Kunden pro Jahr, und dann mit Identitätstabellen.

PS: Eine Identitätstabelle ist eine einfache Tabelle mit einer Zeile und einer Spalte pro ID. für Customer Tabelle, gibt es eine CustomerIdentity Tabelle, wo Sie neueste ID speichern. Die ID-Generierung erfolgt manuell mit der update-Anweisung.

+0

bedeuten, wie diese 'CREATE SEQUENCE Id_Sequence AS INT START MIT 1 INCREMENT BY 1 MINVALUE 0 NO MAXVALUE NO CACHE' create –

Verwandte Themen