2010-08-19 17 views
41

Tôi cần thực hiện việc này chỉ để thử nghiệm, nhưng sau đó hoàn tác khi thử nghiệm được thực hiện.Làm thế nào để tái hạt giống một bản sắc bảng trong SQL Server 2008 và hoàn tác tất cả một cách an toàn?

Tôi đã thấy một số hướng dẫn trực tuyến về cách tạo lại bảng, nhưng không quá nhiều về cách hoàn tác.

Hãy nói rằng định nghĩa bảng như sau:

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

Hãy nói rằng tôi muốn bản sắc mới để tạm thời bắt đầu từ 12345, và cuối cùng xóa các hàng mới và thiết lập bản sắc bên cạnh những gì nó đã có.

Trả lời

99

Lệnh để thiết lập lại thuộc tính bản sắc là

DBCC CHECKIDENT (tablename, RESEED, new_reseed_value) 

Khi bạn muốn thiết lập bản sắc cột để 12345 bạn chạy này

DBCC CHECKIDENT (beer, RESEED, 12345) 

Khi bạn muốn xóa hàng kiểm tra và khôi phục lại giá trị với giá trị trước đó, bạn làm như sau.

DELETE 
FROM beer 
WHERE beer_id >= 12345 ; 

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

DBCC CHECKIDENT (beer, RESEED, @NewSeed) 

Đây là minh chứng cho kịch bản của bạn. Lưu ý rằng cột beer_id được tạo với thuộc tính IDENTITY (1, 1), trong đó hạt giống nhận dạng là 1 với số gia tăng là 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 ; 
+0

+1 Cảm ơn bạn, trông giống như một câu trả lời hoàn chỉnh. Tôi sẽ thử. –

+5

Cũng giống như một FYI, nếu bạn cần biết hạt giống hiện tại là gì bạn có thể chạy 'SELECT IDENT_CURRENT (' table_name ') 'này – JMS10

Các vấn đề liên quan