Wie kann ich eine Identitätsspalte in einer T-SQL-Tabellenvariablen neu seeden?
Habe ich eine T-SQL - Tabelle variable (keine Tabelle), die hat ein auto inkrementierende Identitätsspalte. Ich will alle Daten löschen aus dieser Variablen und zurücksetzen der identity-Spalte den Wert auf 1. Wie kann das getan werden?
InformationsquelleAutor der Frage Nimesh Madhavan | 2008-09-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie eine table-variable, können Sie es nicht. Wenn es eine Tabelle ist, könnte man es abschneiden, oder verwenden Sie
DBCC CHECKIDENT
. Aber, wenn Sie haben Verwendung eines table-variable, die Sie haben, etwas anderes als eine identity-Spalte. Oder, genauer gesagt, verwenden Sie den identity-Spalte in der Tabelle Variablen, aber die Ausgabe mitROWNUMBER
:Es ist das beste, was Sie tun können, mit der table-Variablen.
InformationsquelleAutor der Antwort Josef
Abschneiden der Tabelle dump ALLER Daten und zurücksetzen der Identität Samen.
Andernfalls können Sie mit diesem Aufruf zum zurücksetzen der Identität unter Beibehaltung von Daten:
InformationsquelleAutor der Antwort Stephen Wrighton
Ich getan, als wollte ich mit einem TOP und einer Variablen bei der Verwendung von SQL 2000. Im Grunde fügen Sie die Sätze und achten Sie auf die minimale ein. Ich hatte das gleiche problem und bemerkt diesen thread. Löschen der Tabelle nicht zurückgesetzt, das Saatgut obwohl ich mir vorstellen mit GEHEN sollte, löschen Sie die Tabelle und die variable zurücksetzen der Samen.
@maxlimit in die obige Abfrage war es, die top 900 der Abfrage, und da die Tabelle Variablen haben einen unterschiedlichen Start-Identität-Schlüssel, dies zu lösen wäre das Problem.
Nachträgliche Abfrage subtrahieren, die von abgeleiteten Verfahren zu machen, legen Sie "1", usw.
Hoffe, es hilft.
Lauren
InformationsquelleAutor der Antwort Lauren Glenn
Ich schlage vor, Sie verwenden zwei table-Variablen. @Table1-Tabelle besitzt eine identity-Saatgut auf der ersten Spalte. @Tabelle2 hat die gleichen ersten Spalte, aber keine Identität Samen auf.
Als Sie Durchlaufen den Prozess,
dann Löschen Aus beiden Tabellen, wie Sie Ihre Prozess-Loops.
Auf Ihrem ersten pass, den @Table2 haben eine fortlaufende Nummer in der ersten Zeile, bei 1 beginnend.
Zweiten mal durch die Schleife Ihre zweite Tabelle möglicherweise haben laufende Nummern in der ersten Spalte, beginnend bei sagen 1081. Aber wenn Sie Sie den minimalen Wert einer Variablen
Dann können Sie update @Table2 zu machen RowID bei 1 beginnen Sie wie folgt vor:
Hoffe, das hilft
InformationsquelleAutor der Antwort Pavlo Carerra
Wenn Sie gelöscht haben, alle Zeilen in einer Tabelle, und Sie zurücksetzen möchten die identity-Spalte-Wert.
Verwenden Sie DBCC CHECKIDENT-Befehl.
Dieser Befehl reset PersonId id der Spalte.
Andere Sache zu beachten ist, dass Sie benötigen, schließen Sie den Tabellennamen in einfache Anführungszeichen oder eckige Klammern, wenn Sie verweisen, indem Sie einen vollständigen Pfad, oder, wenn Ihre Tabelle-name enthält Leerzeichen.
InformationsquelleAutor der Antwort Rae Lee
Wenn Sie brauchen, um abgeschnitten die table-variable in jedem Spielzug einer while-Schleife, können Sie die
declare @myTbl (...)
Anweisung in der Schleife. Dies wird erstellen Sie die Tabelle und zurücksetzen der identity-Spalte auf jeder umdrehung der Schleife. Allerdings hat es einen schweren performance-hit. Ich hatte ziemlich enge Schleife, und redeclaring die Tabelle variable relativ zudelete @myTbl
war um ein Vielfaches langsamer.InformationsquelleAutor der Antwort user1017467