Мне нужно сделать это только для тестирования, но затем отменить его после завершения теста.
Я видел несколько онлайн-уроков о том, как заново заполнить таблицу, но не столько о том, как ее отменить.
Скажем, определение таблицы следующее:
create table beer
(
beer_id numeric(10) not null,
mnemonic nvarchar(8)
);
go
Допустим, я хочу новый идентификаторы временно начинаются с 12345
, а в конце удаляют новые строки и устанавливают следующий идентификатор таким, каким он был бы.
Команда для сброса свойства 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 ;