我只需要为测试执行此操作,然后在测试完成后撤消它。
我在网上看到了一些关于如何重新播种表格的教程,但没有太多关于如何撤消它的教程。
假设表定义如下:
create table beer
(
beer_id numeric(10) not null,
mnemonic nvarchar(8)
);
go
假设我希望新身份临时从 开始12345
,最后删除新行并将下一个身份设置为本来的样子。
我只需要为测试执行此操作,然后在测试完成后撤消它。
我在网上看到了一些关于如何重新播种表格的教程,但没有太多关于如何撤消它的教程。
假设表定义如下:
create table beer
(
beer_id numeric(10) not null,
mnemonic nvarchar(8)
);
go
假设我希望新身份临时从 开始12345
,最后删除新行并将下一个身份设置为本来的样子。
重置身份属性的命令是
DBCC CHECKIDENT (tablename, RESEED, new_reseed_value)
当您想将列标识设置为 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 ;
有时我们有来自某些用户的 Schema 限制,从而导致错误(找不到名为“TableName”的表或对象。检查系统目录),因此最好遵循以下代码。
Schema.TableName 应该用撇号括起来
DECLARE @SeedValue INT
SET @SeedValue = (SELECT MAX(ColumnName) FROM Schema.TableName)
DBCC CHECKIDENT ('Schema.TableName',RESEED,@SeedValue)