Bạn hiểu rằng bạn sẽ có va chạm phải không?
bạn cần phải làm điều gì đó như thế này và điều này có thể gây ra bế tắc, vì vậy hãy chắc chắn những gì bạn đang cố gắng hoàn thành ở đây
DECLARE @id int
BEGIN TRAN
SELECT @id = MAX(id) + 1 FROM Table1 WITH (UPDLOCK, HOLDLOCK)
INSERT INTO Table1(id, data_field)
VALUES (@id ,'[blob of data]')
COMMIT TRAN
Để giải thích sự việc va chạm, tôi đã cung cấp một số mã
trước tiên hãy tạo bảng này và chèn một hàng
CREATE TABLE Table1(id int primary key not null, data_field char(100))
GO
Insert Table1 values(1,'[blob of data]')
Go
Bây giờ, hãy mở hai cửa sổ truy vấn và chạy nó cùng lúc
declare @i int
set @i =1
while @i < 10000
begin
BEGIN TRAN
INSERT INTO Table1(id, data_field)
SELECT MAX(id) + 1, '[blob of data]' FROM Table1
COMMIT TRAN;
set @i [email protected] + 1
end
Bạn sẽ thấy một loạt những thứ này
Máy chủ:Msg 2627, Mức 14, Trạng thái 1, Dòng 7 Vi phạm ràng buộc KHÓA CHÍNH 'PK__Table1__3213E83F2962141D'. Không thể chèn khóa trùng lặp trong đối tượng 'dbo.Table1'. Câu lệnh đã bị chấm dứt.