如何在 SQLServer2008中重新输入表标识并安全地撤消它?

我需要这样做只是为了测试,但是在测试完成后撤消它。

我在网上看到过一些关于如何重新播种表的教程,但是没有太多关于如何撤销它的教程。

假设表定义如下:

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

假设我希望新标识临时从 12345开始,最后删除新行,并将下一个标识设置为原来的样子。

94041 次浏览

重置标识属性的命令为

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)