SP bricht ohne Fehler Schleifendurchlauf ab

10/06/2010 - 16:39 von Gregor Thul | Report spam
Hallo,
ich habe ein Problem mit MS SQL-Server. Eine gespeicherte Procedure bricht
einfach mitten in einem Schleifendurchlauf ab wenn mehr als 10 Durchlàufe
stattfinden sollen und ich bekomme keine Fehlermeldung.
Diese SP ruft eine andere SP (sp_send_auth ) auf die mittels der Componente
jmail von DIMAC EMails versendet. Diese SP ist Fehlerfrei. (Auch in ihr
schreibe ich ein Logfile welches keine Fehler ausweist.)
Seltsamerweise funktioniert die SP ohne Probleme:
- wenn weniger als 10 eMails versendet werden sollen und
- wenn ich sie aus dem Query Analyzer aufrufe. (100 Mails sind dann kein
Problem)
Wird sie aber von meiner ASP Seite aufgerufen dann bricht sie mitten im
Schleifendurchlauf ab. Wenn ich z.B. 20 Mails versenden will dann werden nur
13 Mails versandt. Da ich keine Fehlermeldung in meinem ASP-Script bekomme,
habe ich jetzt mal Funktionen eingebaut die mir einen event. Fehler in einer
Tabelle speichern sollen.
Diese schreiben einen Eintrag in eine Tabelle
- vor Aufruf der SP zum Versenden (1. Eintrag)
- nach Aufruf der SP zum Versenden (2. Eintrag)
- Vor Beenden der SP nach allen Schleifendurchlàufen (3. Eintrag)
Wenn zuwenig eMails versendet werden fehlt dieser letzte Eintrag, d.h. die
Procedure wird nach dem Schreiben des 2. Eintrags abgebrochen.
In der Tabelle steht nie eine Fehlernummer.

Hat jemand eine Idee wie ich an eine Fehlermeldung kommen kann? Wie schon
gesagt: Debuggen mit dem Query Analyzer bringt nichts, da es ja dort ohne
Probleme funktioniert.

Ich hoffe, ich habe mein Problem verstàndlich ausgedrückt und habe die SP
hier mal aufgeführt mit Kommentaren.

Bin für jeden Tip dankbar.

Gruß
Gregor Thul



CREATE PROCEDURE [dbo].[sp_X_mails_versenden]
(
@wie_oft int,
@sender nvarchar(100),
@sendername nvarchar(100)='',
@serveraddress nvarchar(100)='',
@recipient nvarchar(255),
@subject nvarchar(255) ='',
@mailbodytxt nvarchar(4000),
@mailbodyhtml nvarchar(4000),
@AUTH_name nvarchar(100)='',
@AUTH_passwort nvarchar(100)=''
)

AS


DECLARE @zaehler int
DECLARE @MyDatetime datetime
DECLARE @zaehler_as_char nvarchar(20)


SET @zaehler = 1

Schleifen Anfang
WHILE @zaehler <= @wie_oft
BEGIN

SET @zaehler_as_char = cast (@zaehler AS nvarchar)

1. Eintrag in Log-Datei schreiben

set @MyDatetime = getdate()
INSERT INTO [dbo].[mail_logfile]
( [zeit],
[Mail_Nr],
[aus_SP],
[von_Punkt],
[Error_Nr],
[log],
[empfaenger])

VALUES
( @MyDatetime,
@zaehler_as_char,
'sp_X_mails_versenden',
'VOR Aufruf sp_send_auth',
@@Error,
'',
@recipient)






Aufruf der SP die die Mails versendet

exec sp_send_auth
@zaehler_as_char,
@sender,
@sendername,
@serveraddress,
@recipient,
'',
'',
'',
@subject,
@mailbodytxt,
@mailbodyhtml ,
@AUTH_name,
@AUTH_passwort


2. Eintrag in Log-Datei schreiben
Dieser Eintrag wird für jede versendete EMail geschrieben geschrieben,
d.h. sp_send_auth wird fehlerfrei beendet.

set @MyDatetime = getdate()
INSERT INTO [dbo].[mail_logfile]
( [zeit],
[Mail_Nr],
[aus_SP],
[von_Punkt],
[Error_Nr],
[log],
[empfaenger]
)

VALUES
( @MyDatetime,
@zaehler_as_char,
'sp_X_mails_versenden',
'NACH Aufruf sp_send_auth',
@@Error,
'',
@recipient
)


SET @zaehler = @zaehler+1


END
Schleifen Ende


3. Eintrag in Log-Datei schreiben
Dieser Eintrag wird NIE geschrieben wenn nicht alle Mails versendet
werden.

set @MyDatetime = getdate()
INSERT INTO [dbo].[mail_logfile]
( [zeit],
[Mail_Nr],
[aus_SP],
[von_Punkt],
[Error_Nr],
[log],
[empfaenger])

VALUES
( @MyDatetime,
@zaehler_as_char,
'sp_X_mails_versenden',
'VOR ENDE DER SP',
@@Error,
'',
@recipient)


GO
 

Lesen sie die antworten

#1 Lutz Uhlmann
11/06/2010 - 08:44 | Warnen spam
Hallo Gregor,

welche SQL-Server Version hast du denn???
Kannst du den Code in deiner Prozdur in einen TRY-CATCH-Block packen??

Lutz

Ähnliche fragen