Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Wie kann man eine Tabellenidentität in SQL Server 2008 neu setzen und alles sicher rückgängig machen?

Der Befehl zum Zurücksetzen der Identitätseigenschaft lautet

DBCC CHECKIDENT (tablename, RESEED, new_reseed_value)

Wenn Sie die Spaltenidentität auf 12345 setzen möchten, führen Sie dies aus

DBCC CHECKIDENT (beer, RESEED, 12345)

Wenn Sie Testzeilen löschen und den vorherigen Wert wiederherstellen möchten, gehen Sie wie folgt vor.

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 Spalte beer_id mit dem IDENTITY (1, 1) erstellt wird -Eigenschaft, die die Identität mit einem Inkrement von 1 auf 1 setzt.

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 ;