如何在SQL Server 2008中重新种子表标识并安全地撤消它?

Ham*_*jan 54 seed sql-server-2008

我只需要进行测试,但是在测试完成后撤消它.

我在网上看过一些关于如何重新播种表格的教程,但不是关于如何撤销它的教程.

假设表定义如下:

create table beer
(
 beer_id  numeric(10) not null,
 mnemonic        nvarchar(8)
);
go
Run Code Online (Sandbox Code Playgroud)

假设我希望新身份暂时开始12345,最后删除新行并将下一个身份设置为原来的身份.

bob*_*obs 130

重置标识属性的命令是

DBCC CHECKIDENT (tablename, RESEED, new_reseed_value)
Run Code Online (Sandbox Code Playgroud)

如果要将列标识设置为12345,请运行此标识

DBCC CHECKIDENT (beer, RESEED, 12345)
Run Code Online (Sandbox Code Playgroud)

如果要删除测试行并将值还原为上一个值,请执行以下操作.

DELETE
FROM beer
WHERE beer_id >= 12345 ;

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

DBCC CHECKIDENT (beer, RESEED, @NewSeed)
Run Code Online (Sandbox Code Playgroud)

这是您的方案的演示.请注意,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 ;
Run Code Online (Sandbox Code Playgroud)

  • 就像一个FYI,如果你需要知道当前的种子是什么,你可以运行这个`SELECT IDENT_CURRENT('table_name')` (10认同)

小智 5

有时我们会受到某些用户的架构限制,从而导致错误(找不到名为“TableName”的表或对象。检查系统目录),因此最好的方法是遵循以下代码。

Schema.TableName 应该用撇号括起来

DECLARE @SeedValue INT
SET @SeedValue = (SELECT MAX(ColumnName) FROM Schema.TableName)
DBCC CHECKIDENT ('Schema.TableName',RESEED,@SeedValue)
Run Code Online (Sandbox Code Playgroud)