ฉันกำลังมีปัญหาการใช้งานพร้อมกันกับส่วนแทรกในขั้นตอนการจัดเก็บ ส่วนที่เกี่ยวข้องของขั้นตอนนี้คือ:
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
เมื่อเรารัน proc ที่เก็บไว้ 3 หรือ 4 ของพร้อมกันนี้เราได้รับการแทรกหลายครั้ง
ฉันกำลังวางแผนในการแก้ไขเช่นนี้:
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
คำถามคือว่าจะแทรกพร้อมกันโดยไม่ซ้ำกันในเซิร์ฟเวอร์ sql หรือไม่ ความจริงที่ว่าฉันต้องใช้ TOP เพื่อแทรกเมื่อรบกวนฉันเท่านั้น
1
คุณไม่จำเป็นต้องใช้ TOP ลบการอ้างอิงตาราง FROM จากคำสั่ง SELECT
—
ErikE
@ GSG ฉันคิดว่าคุณถูกต้อง
—
Chris