Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

फीफो कतार के लिए एसक्यूएल थ्रेडसेफ अद्यतन शीर्ष 1

मेरी चिंता डुप्लीकेट [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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर:GROUP BY में केवल अंतिम प्रविष्टि

  2. SQL सर्वर की दिनांक, समय और डेटाटाइमऑफ़सेट के लिए समतुल्य C# डेटा प्रकार क्या हैं?

  3. एसक्यूएल में दो अपडेट स्टेटमेंट अलग कैसे हैं?

  4. एसक्यूएल सर्वर डेटटाइम ऑब्जेक्ट को बिगिनट (नेट टिक) में कनवर्ट करें

  5. तालिका या अनुक्रमित दृश्य पर CONTAINS या FREETEXT विधेय का उपयोग नहीं कर सकता क्योंकि यह पूर्ण-पाठ अनुक्रमित नहीं है