Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como propagar novamente uma identidade de tabela no SQL Server 2008 e desfazer tudo com segurança?


O comando para redefinir a propriedade de identidade é
DBCC CHECKIDENT (tablename, RESEED, new_reseed_value)

Quando você deseja definir a identidade da coluna para 12345, você executa isso
DBCC CHECKIDENT (beer, RESEED, 12345)

Quando você deseja excluir linhas de teste e restaurar o valor para o valor anterior, faça o seguinte.
DELETE
FROM beer
WHERE beer_id >= 12345 ;

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

DBCC CHECKIDENT (beer, RESEED, @NewSeed)

Aqui está uma demonstração para o seu cenário. Observe que a coluna beer_id é criada com a IDENTITY (1, 1) propriedade, que semeia a identidade para 1 com um incremento 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 ;