Ich habe eine T-SQL Tabellenvariable (keine Tabelle), die eine automatisch inkrementierende Identitätsspalte hat. Ich möchte alle Daten von dieser Variable löschen und den Identitätsspaltenwert auf 1 zurücksetzen. Wie kann dies getan werden?Wie kann ich eine Identitätsspalte in einer T-SQL-Tabellenvariablen neu seeden?
Antwort
Wenn Sie eine Tabelle Variable verwenden, können Sie es nicht tun können. Wenn es eine Tabelle wäre, könnten Sie sie abschneiden oder DBCC CHECKIDENT
verwenden. Wenn Sie jedoch verwenden, um eine Tabellenvariable zu verwenden, müssen Sie etwas anderes als eine Identitätsspalte verwenden. Oder, genauer gesagt, verwenden Sie die Identitätsspalte in der Tabelle variabel, aber Ausgang mit ROWNUMBER
:
DECLARE @t table (pkint int IDENTITY(1,1), somevalue nvarchar(50))
INSERT INTO @t (somevalue) VALUES('one')
INSERT INTO @t (somevalue) VALUES('twp')
INSERT INTO @t (somevalue) VALUES('three')
SELECT row_number() OVER (ORDER BY pkint), somevalue FROM @t
DELETE FROM @t
INSERT INTO @t (somevalue) VALUES('four')
SELECT row_number() OVER (ORDER BY pkint), somevalue FROM @t
Es ist das Beste, was Sie mit der Tabellenvariable zu tun.
Durch das Abschneiden der Tabelle werden ALLE Daten gespeichert und der Identitätsstart zurückgesetzt.
Andernfalls können Sie diesen Aufruf benutzen, um die Identität zurückgesetzt, während jede der Datenhalte:
DBCC CHECKIDENT (yourtableName, reseed, @NewStartSeedValue)
Wenn Sie die Tabellenvariable in jeder Runde einer while-Schleife abschneiden müssen, können Sie die declare @myTbl (...)
-Anweisung in die Schleife einfügen. Dadurch wird die Tabelle neu erstellt und die Identitätsspalte wird bei jedem Durchlauf der Schleife zurückgesetzt. Es hat jedoch einen starken Leistungseinbruch. Ich hatte ziemlich enge Schleife, und die Tabelle Variable relativ zu delete @myTbl
neu deklarieren war mehrmals langsamer.
- Dan
Nein. Dies funktioniert nicht. –
declare @tb table (recid int,lineof int identity(1,1))
insert into @tb(recid)
select recid from tabledata
delete from @tb where lineof>(select min(lineof) from @tb)[email protected]
Ich tat dies, wenn ich eine TOP und eine Variable verwenden wollte, als mit SQL 2000. Grundsätzlich Sie in den Datensätzen hinzufügen und dann auf das Minimum aussehen. Ich hatte das gleiche Problem und habe diesen Thread bemerkt. Das Löschen der Tabelle setzt den Seed nicht zurück, obwohl ich mir vorstelle, GO zu verwenden, sollte die Tabelle und die Variable löschen, um den Seed zurückzusetzen.
@maxlimit in der Abfrage oben war, um die Top 900 der Abfrage zu erhalten und da die Tabellenvariable einen anderen Start-Identitätsschlüssel hätte, würde dies das Problem lösen.
kann Jede spätere Abfrage, dass die abgeleiteten Verfahren subtrahieren, um es als „1“ machen einfügen usw.
Hoffe, es hilft.
Lauren
Ich schlage vor, Sie verwenden zwei Tabellenvariablen. Das @ Table1 hat einen Identitätsstartwert in der ersten Spalte. @ Table2 hat die gleiche erste Spalte, aber keine Identität.
Wie Sie eine Schleife durch Ihren Prozess,
Insert into @Table2 from @Table1
dann aus beiden Tabellen löschen als Prozess Loops. bei 1.em
Das zweite Mal durch die Schleife könnte Ihre zweite Tabelle hat fortlaufende Nummern in der ersten Spalte ab etwa 1081
Beim ersten Durchlauf wird die @ Table2 beginnend aa laufende Nummer in der ersten Reihe hat .Aber wenn Sie den minimalen Wert auf eine Variable
(Select @FixSeed = min(RowID) From @Table2)
Dann wählen Sie @ Table2 aktualisieren, um RowID bei 1 zu machen beginnen wie folgt:
Update @Table2 Set RowID = RowID - @FixSeed +1
this helps
Wenn Sie gelöscht haben alle Zeilen in einer Tabelle und Sie möchten den Identitätsspaltenwert zurücksetzen.
USe DBCC CHECKIDENT Befehl.
DBCC CHECKIDENT(tblPerson, RESEED, 0)
Dieser Befehl wird die Identity-Spalte von PersonId zurücksetzen.
Eine andere Sache zu beachten ist, dass Sie den Tabellennamen in einfache Anführungszeichen oder eckige Klammern einschließen müssen, wenn Sie einen vollständigen Pfad referenzieren, oder wenn Ihr Tabellenname Leerzeichen enthält.
DBCC CHECKIDENT (‘databasename.dbo.orders’,RESEED, 0)
- 1. Kann ich DBCC CHECKIDENT zum Auflisten der Identitätsspalte in einer Tabellenvariablen verwenden?
- 2. Identitätsspalte in SQL Compact neu erstellen
- 3. Nummerierung einer Identitätsspalte
- 4. EF7 Konfigurieren einer Identitätsspalte
- 5. Wie kann ich feststellen, ob eine Spalte in MSSQL 2000 eine Identitätsspalte ist?
- 6. Erstellen einer Tabelle mit Identitätsspalte
- 7. Wie kann man eine Schleife in einer Animation neu starten?
- 8. Wie kann ich eine Funktion in Django neu definieren lassen?
- 9. Wert einer Identitätsspalte in SQL Server erhöhen, ohne die Tabelle zu löschen und neu zu erstellen
- 10. Formel zum Erstellen einer Identitätsspalte in Excel
- 11. Wie kann ich eine Puffernummer in VIM neu zuweisen?
- 12. Wie Aktualisieren der Identitätsspalte in SQL Server?
- 13. Wie mehrere von 13 erscheinen in einer Identitätsspalte stoppen
- 14. Identitätsspalte in EF 4
- 15. Wie kann ich eine Absenden-Schaltfläche neu gestalten?
- 16. Wie kann ich eine Tab-Ansicht aufrufen/neu laden?
- 17. kopieren Sie eine Identitätsspalte in eine andere Tabelle
- 18. In PostgreSQL wie fügen Sie in eine Tabelle mit nur einer Identitätsspalte ein?
- 19. Wie lade ich eine Sammlungsansicht automatisch neu?
- 20. Wie kann ich TortoiseSVN sicher neu starten?
- 21. Eine Funktion in einer Funktion neu deklarieren
- 22. Wie kann ich die Sichtbarkeit einer benutzerdefinierten Listenaktion auf eine neu definierte Gruppe beschränken?
- 23. Wie bestimmen Sie, welche SQL-Tabellen eine Identitätsspalte programmgesteuert haben
- 24. Kann ich eine Javascript-Funktion mit Excel VBA neu schreiben?
- 25. Wie kann ich eine gespeicherte Prozedur schreiben, die nummerierte Daten nach einer Statusspalte neu anordnet?
- 26. Wie kann ich eine Methode in einer Fabrik FactoryGirl definieren?
- 27. Wie lade ich eine Relationssammlung in Laravel neu?
- 28. Entity Framework Identitätsspalte funktioniert nicht
- 29. Kann ich eine SQL Server-Identitätsspalte verwenden, um die eingefügte Reihenfolge der Zeilen zu bestimmen?
- 30. Wie zeichne ich eine benutzerdefinierte Ansicht in onResume neu?
Cool, ich wusste nie über diesen DBCC-Befehl. Vielen Dank! –
Man kann eine Tabellenvariable weder TRUNCATE noch DBCC CHECKIDENT für eine Tabellenvariable verwenden. – AndrewJacksonZA
-1 Die Frage bezog sich speziell auf Tabellenvariablen. Wie in dem obigen Kommentar angegeben, kann in dieser Antwort nichts für diese verwendet werden. –