2010-08-19 4 views
41

Ich muss dies nur zum Testen tun, aber dann rückgängig machen, wenn der Test fertig ist.Wie wird eine Tabellenidentität in SQL Server 2008 neu erstellt und alles sicher rückgängig gemacht?

Ich habe einige Tutorials online gesehen, wie man eine Tabelle re-seed, aber nicht so sehr, wie man es rückgängig macht.

ist die Tabellendefinition Lassen Sie sagen, ist die folgende:

create table beer 
(
beer_id numeric(10) not null, 
mnemonic  nvarchar(8) 
); 
go 

Lasst uns sagen, dass ich die neuen Identitäten wollen bei 12345 vorübergehend starten, und am Ende die neuen Zeilen löschen und die nächste Identität zu dem, was es gesetzt wäre gewesen.

Antwort

99

Der Befehl, um die Identität Eigenschaft zurückgesetzt ist

DBCC CHECKIDENT (tablename, RESEED, new_reseed_value) 

Wenn Sie die Spalte Identität 12345 festlegen möchten Sie diese laufen

DBCC CHECKIDENT (beer, RESEED, 12345) 

Wenn Sie Testreihen löschen möchten, und den Wert wiederherstellen Mit dem vorherigen Wert machen Sie folgendes.

DELETE 
FROM beer 
WHERE beer_id >= 12345 ; 

DECLARE @NewSeed NUMERIC(10) 
SELECT @NewSeed = MAX(beer_id) 
FROM beer ; 

DBCC CHECKIDENT (beer, RESEED, @NewSeed) 

Hier ist eine Demonstration für Ihr Szenario. Beachten Sie, dass die beer_id Spalte mit der IDENTITY (1, 1) Eigenschaft erstellt wird, die Samen, die Identität zu 1 mit einer Schrittweite von 1.

CREATE TABLE beer 
    (  
    beer_id NUMERIC(10) IDENTITY (1,1) NOT NULL, 
    mnemonic NVARCHAR(8) 
    ); 

GO 

INSERT INTO beer(mnemonic) VALUES ('Beer 1') 
INSERT INTO beer(mnemonic) VALUES ('Beer 2') 

SELECT * 
FROM beer ; 

DBCC CHECKIDENT (beer, RESEED, 12345) 
GO 

INSERT INTO beer(mnemonic) VALUES ('Beer 3') 
INSERT INTO beer(mnemonic) VALUES ('Beer 4') 

SELECT * 
FROM beer ; 

DELETE 
FROM beer 
WHERE beer_id >= 12345 ; 

DECLARE @NewSeed NUMERIC(10) 
SELECT @NewSeed = MAX(beer_id) 
FROM beer ; 

DBCC CHECKIDENT (beer, RESEED, @NewSeed) 
GO 

INSERT INTO beer(mnemonic) VALUES ('Beer 5') 
INSERT INTO beer(mnemonic) VALUES ('Beer 6') 

SELECT * 
FROM beer ; 
+0

+1 Danke, sieht aus wie eine vollständige Antwort. Ich werde es versuchen. –

+5

Nur als ein FYI, wenn Sie wissen müssen, was der aktuelle Startwert ist, können Sie diese SELECT IDENT_CURRENT ('table_name') 'ausführen – JMS10