Tôi đang gặp vấn đề tương tranh với các phần chèn của mình trong một thủ tục được lưu trữ. Phần có liên quan của thủ tục là đây:
select @_id = Id from table1 where othervalue = @_othervalue
IF( @_id IS NULL)
BEGIN
insert into table1 (othervalue) values (@_othervalue)
select @_id = Id from table1 where othervalue = @_othervalue
END
Khi chúng tôi chạy đồng thời 3 hoặc 4 trong số các Proc được lưu trữ này, chúng tôi sẽ nhận được nhiều lần chèn.
Tôi đang lên kế hoạch sửa lỗi này như vậy:
insert into table1 (othervalue)
select TOP(1) @_othervalue as othervalue from table1 WITH(UPDLOCK)
where NOT EXISTS ( select * from table1 where othervalue = @_othervalue )
select @_id = Id from table1 where othervalue = @_othervalue
Câu hỏi là, làm thế nào để chèn đồng thời mà không trùng lặp trong máy chủ sql? Thực tế là tôi phải sử dụng TOP để chỉ chèn một lần làm phiền tôi.