Szívás MS SQL INSERT

Írok egy MS SQL Tárolt eljárást. Az alábbi sorok vannak benne:

declare @cr CURSOR
Declare @Myid nvarchar(40)
Declare @Myidx nvarchar(40)
declare @lastid varchar(50)
declare @idd int

UPDATE M SET
    Name      = M_Modify.[Name],
    NameLocal = M_Modify.NameLocal
FROM M , M_Modify
WHERE M.MYID = M_Modify.MYID

SET @cr = CURSOR FAST_FORWARD FOR
SeleCT myid FROM M_Modify ORDER BY myid

OPEN @cr   /* Mergnyitom a cursort a táblára */

while @@FETCH_STATUS = 0 /* Ciklussal végigmegyek az M_Modify tábla sorain */
begin
  fetch next from @cr into @MyID   /* Beolvasom a következő sort */
  SET @MyIDx = '---'
  /* Megnézem, hogy a módosítandó táblában van-e ilyen MYID-j? sor */
  SeleCT @MyIDx = M.MyID FROM M WHERE M.MyID = @MyID  
       
  if @MyIDx = '---'  
  begin
        /* Ha nincs ilyen MYId-j? sor, akkor beszúrok egyet ezzel az MYID-vel*/
        INSERT INTO M ( MYID )  VALUES ( @MyID )
        commit /* <======== Ennek a hiánya miatt vagy 4 órán keresztül */
        /* Update-et futtatok az előzőleg beszúrt sorra. */
        UPDATE  M SET
           Name        = Muszer_Modify.[Name],
           NameLocal   = Muszer_Modify.NameLocal
        FROM M , M_Modify
        WHERE ( M.MyID LIKE @MyID ) AND ( M_Modify.MYID LIKE @MyID )           
    end     
end /* While */

A fenti kód egy változásokat tartalmazó táblából átemel adatokat az eredeti táblába.

Ha a MyID megvan az eredeti táblában, akkor csak módosítja az adatokat táblában. Ha nincsen meg a MYID az eredeti táblában, akkor hozzáfűzi a rekordokat a hiányzó MYID-vel.

A fenti kódban a commit hiánya miatt kb. négy órán keresztül nem láttam a beszúrott sorokat akkor, amikor lekérdeztem a táblát egy SELECT * FROM M utasítással. A hajamat téptem. Betettem a COMMIT parancsot és minden rögtön ment.

Tanulság: A programozás is egy szopás!