Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Come eseguire nuovamente il seeding di un'identità di tabella in SQL Server 2008 e annullare tutto in modo sicuro?

Il comando per reimpostare la proprietà identity è

DBCC CHECKIDENT (tablename, RESEED, new_reseed_value)

Quando vuoi impostare l'identità della colonna su 12345, esegui questo

DBCC CHECKIDENT (beer, RESEED, 12345)

Quando vuoi eliminare le righe di prova e ripristinare il valore al valore precedente, procedi come segue.

DELETE
FROM beer
WHERE beer_id >= 12345 ;

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

DBCC CHECKIDENT (beer, RESEED, @NewSeed)

Ecco una dimostrazione per il tuo scenario. Nota che la colonna beer_id viene creata con IDENTITY (1, 1) proprietà, che esegue il seeding dell'identità a 1 con un incremento di 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 ;