Đặt lại chuỗi SQL Server 2012


13

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, SEQUENCEnó 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& SEQUENCElệ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 đồ SEQUENCEchọ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 SEQUENCElệnh chính xác.

Đây là bản cài đặt SQL 2012 SP1 Enterprise Edition.

Câu trả lời:



5

Sử dụng tập lệnh của bạn với một vài thay đổi nhỏ:

CREATE SCHEMA foo;
GO
CREATE SEQUENCE foo.fee
START WITH 1
INCREMENT BY 1
NO CYCLE
NO CACHE;
GO
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
SET NOCOUNT ON
GO
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')
GO 50000
SELECT
    MIN(order_number), 
    MAX(order_number)
FROM foo.sample_table_with_data AS stwd
GO
DROP SEQUENCE foo.fee;
GO
DROP TABLE foo.sample_table_with_data
GO
DROP SCHEMA foo;

... Tôi không thể sao chép sự cố trên SQL Server 2012 SP1 (bản dựng 3000) trở lên.

Tôi cũng không thể tìm thấy mục Kết nối hoặc bài viết KB đề cập đến kịch bản cụ thể này (và có nhiều SEQUENCEvấn đề khác ). Điều đó không có nghĩa là nó không tồn tại trước SP1 vì không phải tất cả các bản sửa lỗi đều được ghi lại.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.