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