RESEED-Identitätsspalten in der Datenbank

8

Kann ich das

verwenden? %Vor%

Befehl, um den aktuellen Wert einer Identitätsspalte auf den ursprünglichen Wert in SQL Server 2008 zurückzusetzen?

Wenn ja, ist dies der richtige Weg, um diese Operation ohne Nachteil durchzuführen? Wenn nicht, gibt es einen alternativen Weg, dies zu tun?

    
Lorenzo 12.11.2010, 13:30
quelle

3 Antworten

7
  

Kann ich den Befehl DBCC CHECKIDENT verwenden, um den aktuellen Wert einer Identitätsspalte auf den ursprünglichen Wert in SQL Server 2008 zurückzusetzen?

Ja.

  

Wenn ja, ist dies der richtige Weg, um diese Operation ohne Nachteil durchzuführen?

Dies ist der eine dokumentierte Weg, dies zu tun.

Mögliche Nachteile: Sie könnten doppelte IDENTITY -Werte erhalten - es gibt keine Garantie von SQL Server, dass kein Wert zurückgegeben wird, der nicht bereits verwendet wird.

z. Wenn Ihr IDENTITY momentan 100 ist und Sie es auf 1 zurücksetzen, werden die Chancen früher oder später liegen, es wird ein Wert erzeugt, der bereits verwendet wird.

Das IDENTITY , wie in SQL Server implementiert, sucht nicht nach vorhandenen Werten oder irgendetwas - es erzeugt nur sequentielle Zahlen. Es liegt an Ihnen - vor allem, wenn Sie%% co_de für RESEED verwendet haben, um sicherzustellen, dass die Werte nicht dupliziert werden.

    
marc_s 12.11.2010, 13:58
quelle
10

Der Wert kann weggelassen werden. Also wenn du

benutzt %Vor%

SQL Server setzt den Ident-Wert auf die richtige nächste Zahl - entsprechend den bereits verwendeten Zahlen. Dies ist die einzige Möglichkeit, Identitätswerte, die ich kenne, neu zu setzen.

    
Manfred Sorg 12.11.2010 14:13
quelle
0

Es hat einen großen Nachteil, wenn und nur wenn das Feld ein Primärschlüssel und Verweis auf einen Fremdschlüssel in einer anderen Tabelle ist. Neuzuordnung hilft beim Abrufen von Datensätzen in Transaktionstabellen mit Indizes für das Feld.

    
surenv2003 16.02.2011 06:54
quelle