मैं एक संग्रहीत कार्यविधि में अपने आवेषण के साथ समसामयिक समस्याएँ कर रहा हूँ। प्रक्रिया का प्रासंगिक हिस्सा यह है:
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
जब हम इनमें से 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 का उपयोग करना है जो मुझे परेशान करता है।