Julius: mssql update nach select

hi ich habe eine Problem:
ich habe eine sqltaballe in der ich Dinge abspeichere die noch zu machen sind(für ein Programm).
Die hat etwa die Spalten: id, tätigkeit, staus, auftrag_id.
wenn das Programm nun arbeitet soll es sich eine noch nicht bearbeitete Tätigkeit aussuchen und dann den Status auf "bearbeitet" setzten damit die Tätigkeit nicht nochmal ausgeführt wird.
natürlich könnte ich einfach erst mit Select eine tätigkeit+id auslesen und in einer zweiten Update Anfrage den entsprechenden Status auf "bearbeitet" setzten.
Allerdings soll man auch Einträge bei denen der Status noch unbearbeitet ist gelöscht werden und es währe fatal wenn zwischen dem select und dem update jmd anderes den entsprechenden Eintrag bearbeiten oder löschen würde.

weis jmd wie ich es hinkriege dass zwischen den select und dem Update command niemand anderes meine Tabelle bearbeitet?

  1. weis jmd wie ich es hinkriege dass zwischen den select und dem Update command niemand anderes meine Tabelle bearbeitet?

    Indem du die Tabelle sperrst.

    Trotzdem halte ich es aufgrund deiner Beschreibung nicht für notwendig hier mit Locking zu arbeiten - ein SELECT und danach folgendes UPDATE ist hier unsinnig.

    Warum gibts nicht einfach ein UPDATE whatever SET status = 'bearbeitet' WHERE was auch immer du im select machen würdest.

    Alternativ kannst du auch die Transaktionen isolieren, damit auf jeden Fall nichts zwischen die beiden Queries funkt.
    http://msdn.microsoft.com/en-us/library/ms173763.aspx
    http://msdn.microsoft.com/de-de/library/ms189061.aspx

    1. Hallo, warum nicht ein UPDATE, was ein Recordset mit den upgedateten/unupgedateten Daten ausgibt? Cheers, Frank

      1. Warum gibts nicht einfach ein UPDATE whatever SET status = 'bearbeitet' WHERE was auch immer du im select machen würdest.

        Hallo, warum nicht ein UPDATE, was ein Recordset mit den upgedateten/unupgedateten Daten ausgibt? Cheers, Frank

        danke, hab es jetzt so gemacht. Hier mein code muss nurnoch testen ob er auch klappt:

          
        UPDATE TOP (1) t_OrderedItems  
        SET Status = 'done'  
        OUTPUT inserted.Item_ID  
        WHERE Order_ID = @OrderId  
        AND Status = 'req'  
        
        

        ps: warum macht die syntaxfärbung bei diesem code das 'Status' rot aber das 'Order_ID' blau ?