Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment réamorcer une identité de table dans SQL Server 2008 et tout annuler en toute sécurité ?

La commande pour réinitialiser la propriété d'identité est

DBCC CHECKIDENT (tablename, RESEED, new_reseed_value)

Lorsque vous souhaitez définir l'identité de la colonne sur 12345, exécutez ceci

DBCC CHECKIDENT (beer, RESEED, 12345)

Lorsque vous souhaitez supprimer des lignes de test et restaurer la valeur à la valeur précédente, procédez comme suit.

DELETE
FROM beer
WHERE beer_id >= 12345 ;

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

DBCC CHECKIDENT (beer, RESEED, @NewSeed)

Voici une démonstration de votre scénario. Notez que la colonne beer_id est créée avec le IDENTITY (1, 1) propriété, qui initialise l'identité à 1 avec un incrément de 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 ;