Tôi đang trong quá trình thử nghiệm và điền vào một bảng cụ thể tận dụng SEQUENCE
đối tượng. Trong quá trình này, tôi đang thử nghiệm điền vào bảng với hàng chục ngàn dòng chèn (vì tôi không quen với cách lập trình này). Vấn đề tôi gặp phải với bảng cụ thể này là khi tôi bắt đầu một bài kiểm tra dân số khác, SEQUENCE
nó không được đặt lại về số đầu tiên tôi muốn (là 1).
Khi tôi muốn chạy lại một bài kiểm tra mới, tôi xóa bảng được đề cập, sau đó chạy như sau:
DROP SEQUENCE foo.fee;
GO
DROP SCHEMA foo;
GO
Khi tôi muốn chạy lại kiểm tra, tôi chạy các lệnh SCHEMA
& SEQUENCE
lệnh sau, được thực hiện theo thứ tự dưới đây:
CREATE SCHEMA foo;
GO
CREATE SEQUENCE foo.fee
START WITH 1
INCREMENT BY 1
NO CYCLE
NO CACHE;
GO
Sau đó tôi tạo bảng:
CREATE TABLE foo.sample_table_with_data
(order_number bigint PRIMARY KEY NOT NULL,
sample_column_one nvarchar(max) NULL,
sample_column_two nvarchar(max) NULL,
sample_column_three nvarchar(max) NULL)
GO
Sau khi hoàn thành, tôi chạy lệnh chèn sau 50.000 lần:
INSERT INTO [foo].[sample_table_with_data]
(
[order_number],
[sample_column_one],
[sample_column_two],
[sample_column_three]
)
VALUES
(
NEXT VALUE FOR foo.fee,
'Blah',
'Blah Blah',
'Blah Blah Blah'
)
Bây giờ hoàn toàn không có vấn đề với dữ liệu nhập vào bảng. Thách thức tôi gặp phải là khi tôi xóa bảng, bỏ lược đồ và trình tự sau đó tạo lại bảng, trình tự và lược đồ SEQUENCE
chọn từ số cuối cùng trong cơ sở dữ liệu trước đó và không đặt lại thành một.
Ví dụ: nếu số cuối cùng trong chuỗi là 634,534 thì số thứ tự tiếp theo trong bảng mới là 634,535.
Sau khi xóa bảng và bỏ lược đồ và trình tự, tôi chạy như sau để xác minh loại bỏ trình tự và lược đồ:
SELECT * FROM INFORMATION_SCHEMA.SCHEMATA
GO
SELECT * FROM sys.sequences
GO
Tôi bối rối về lý do tại sao điều này xảy ra. Có một lệnh khác mà tôi bị thiếu ở đây sẽ giúp tôi bản địa hóa chính xác những gì đang diễn ra ở đây?
Tôi nên lưu ý rằng bảng này thuộc về một cơ sở dữ liệu với 7 bảng khác đều chạy SEQUENCE
lệnh chính xác.
Đây là bản cài đặt SQL 2012 SP1 Enterprise Edition.