मेरी चिंता डुप्लीकेट [InvoiceID]
उसी के लिए एक से अधिक प्रिंट अनुरोध [InvoiceID]
पहले अपडेट पर एक पंक्ति को set [Status] = 'Printing'
. मिलता है
दूसरे अपडेट पर सभी [चालान आईडी] पंक्तियों को set [Status] = 'Printed'
मिलता है
यह स्थिति ='ड्राफ़्ट' वाली पंक्तियों को भी सेट करेगा
शायद आप यही चाहते हैं
set [Status] = 'Print'
से पहले एक और प्रक्रिया उसी [चालान आईडी] को उठा सकती है
तो कुछ डुप्लीकेट प्रिंट होंगे और कुछ नहीं
मैं update lock
के उपयोग पर टिप्पणियों के साथ जाता हूं
यह गैर-निर्धारक है लेकिन आप केवल top (1)
. ले सकते हैं और order by
छोड़ें . आपको सबसे हाल की पंक्ति मिल जाएगी लेकिन इसकी गारंटी नहीं है। यदि आप कतार साफ़ करते हैं तो आपको सभी मिलते हैं।
यह दर्शाता है कि आप 'ड्राफ्ट' खो सकते हैं =1
declare @invID int;
declare @T table (iden int identity primary key, invID int, status tinyint);
insert into @T values (1, 2), (5, 1), (3, 1), (4, 1), (4, 2), (2, 1), (1, 1), (5, 2), (5, 2);
declare @iden int;
select * from @t order by iden;
declare @rowcount int = 1;
while (@ROWCOUNT > 0)
begin
update top (1) t
set t.status = 3, @invID = t.invID, @iden = t.iden
from @t t
where t.status = '2';
set @rowcount = @@ROWCOUNT;
if(@rowcount > 0)
begin
select @invID, @iden;
-- do stuff
update t
set t.status = 4
from @t t
where t.invID = @invID; -- t.iden = @iden;
select * from @T order by iden;
end
end