Avatar billede sblar Nybegynder
06. januar 2006 - 14:17 Der er 1 kommentar

Cursor loop afbrydes

I en stored procedure (SP1) gennemløber jeg en cursor med data fra Tabel1. For hver post i cursoren indsætter jeg en post i Tabel2.
Insert trigger på Tabel2 indsætter poster i Tabel3 (i en anden DB).
I insert trigger på Tabel3 udføres nogle valideringstest på de indkommende data og ved fejl returneres.
Dette medfører at resten af posterne i cursoren i SP1 ikke behandles og det var jo ikke meningen. Idéen var at kun fejlbehæftede forsøg på inserts i Tabel3, blev elimineret mens resten blev behandlet.

Programflowet er som følger:

-- SP1 ---------------------------------
DECLARE csrListe CURSOR FOR SELECT felt1 FROM Tabel1
       
OPEN csrListe

WHILE @@FETCH_STATUS = 0 BEGIN
    FETCH NEXT FROM csrListe INTO @feltet
        IF @@FETCH_STATUS = 0 BEGIN
            bla-bla-bla
            INSERT INTO Tabel2 (Ordrenr, Status, Dato, Resultat) VALUES (@Ordrenr, @Status, @Dato, @Result)
        END
END
CLOSE csrListe
DEALLOCATE csrListe

-- Tabel2_ITrig ---------------------------------
INSERT INTO db2.dbo.Tabel3 SELECT * FROM inserted

-- Tabel3_ITrig ---------------------------------
SET NOCOUNT ON

DECLARE @STATUS int
DECLARE @DATOTID smalldatetime
DECLARE @RESULT int


SELECT @ORDRENR =    (SELECT ORDRENR FROM INSERTED)
SELECT @STATUS =    (SELECT STATUS FROM INSERTED)
SELECT @DATOTID =    (SELECT DATO FROM INSERTED)
SELECT @RESULT =     (SELECT RESULT FROM INSERTED)

SET XACT_ABORT ON


IF NOT @STATUS IN (1,2,3,4,5,6,9,10) BEGIN
  SELECT @ERR = 'FEJL - ukendt status = ' + CAST(@ORDRENR as char(4))
  UPDATE Tabel3 SET RESULTAT=2 WHERE ORDRENUMMER=@ORDRENR

  EXEC @rc = master.dbo.xp_smtp_sendmail
        @FROM    = N'Mig@her.dk',
        @TO        = N'dig@her.dk',
        @priority  = N'HIGH',
        @subject    = N'Fejl i status',
        @message    = N'Fejl i status',
        @type      = N'text/plain',
        @server    = 'smtp.her.dk'

  RETURN
END
Avatar billede sblar Nybegynder
06. januar 2006 - 14:19 #1
Jeg går ud fra at det er den sidste RETURN der afbryder alt.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester