समस्या यह है कि जहां आपके पास कई पंक्तियां डाली जा रही हैं, आप सभी पंक्तियों के लिए एक ही अगली उपलब्ध आईडी का उपयोग कर रहे हैं, आपको ROW_NUMBER()
जोड़ना होगा यह सुनिश्चित करने के लिए कि xid इन्सर्ट में अद्वितीय था:
insert into [xtable] (XID)
select [x].[NextavailableID] + ROW_NUMBER() OVER (ORDER BY i.ID)
from inserted [i]
cross apply
(
select coalesce(max([t].[XID]), 0) [NextavailableID]
from [xtable] [t] WITH (TABLOCK, HOLDLOCK)
) [x];
डुप्लिकेट को रोकने के संबंध में आप xtable
. को लॉक करने के लिए तालिका संकेतों का उपयोग कर सकते हैं अधिकतम xid
. प्राप्त करते समय ।
इन तालों का उपयोग करने का दोष यह है कि आप गतिरोध प्राप्त करेंगे। इस कॉलम पर आपके पास एक अद्वितीय बाधा/सूचकांक होना चाहिए क्योंकि यह डुप्लिकेट को रोकेगा, हालांकि जब दौड़ की स्थिति पूरी हो जाती है तो इसका परिणाम अपवाद भी होगा। आखिरकार, आप जो भी तरीका चुनेंगे, आपको किसी न किसी तरह का त्याग करना होगा।