Как повторно заполнить идентификатор таблицы в SQL Server 2008 и безопасно отменить все это?

Мне нужно сделать это только для тестирования, но затем отменить его после завершения теста.

Я видел несколько онлайн-уроков о том, как заново заполнить таблицу, но не столько о том, как ее отменить.

Скажем, определение таблицы следующее:

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

Допустим, я хочу новый идентификаторы временно начинаются с 12345 , а в конце удаляют новые строки и устанавливают следующий идентификатор таким, каким он был бы.

52
задан Brian Tompsett - 汤莱恩 26 February 2017 в 11:34
поделиться

1 ответ

Команда для сброса свойства identity - это

DBCC CHECKIDENT (tablename, RESEED, new_reseed_value)

Когда вы хотите установить identity столбца в 12345, вы выполняете следующее

DBCC CHECKIDENT (beer, RESEED, 12345)

Когда вы хотите удалить тестовые строки и восстановить предыдущее значение, вы делаете следующее.

DELETE
FROM beer
WHERE beer_id >= 12345 ;

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

DBCC CHECKIDENT (beer, RESEED, @NewSeed)

Вот демонстрация для вашего сценария. Обратите внимание, что столбец beer_id создан со свойством IDENTITY (1, 1), которое устанавливает идентификатор в 1 с инкрементом 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 ;
129
ответ дан 7 November 2019 в 09:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: