Newbie: Fehler in gespeicherter Prozedur protokollieren - oder vermeiden

29/05/2008 - 11:54 von arno | Report spam
Hallo,

ich habe eine gespeicherte Prozedur, die mir Tabellen einer Datenbank
kopiert (von einem Linked Server mit Firebird nach SQL Server 2000). Leider
scheitern aber Abfragen manchmal, wenn für den SQL-Server ungültige
Datumswerte enthalten sind, z. b. 01.01.0666. Ich dachte, folgende Prozedur
würde funktionieren, aber ich bekomme keine Fehlermeldung, wenn die Prozedur
abgebrochen wird:

SET ANSI_NULLS ON
SET ANSI_WARNINGS ON
GO

TRUNCATE TABLE X
INSERT INTO X SELECT * FROM OPENQUERY(LSERVER, 'SELECT * FROM X')
INSERT INTO _IMPORTLOG SELECT 'X' Tabelle, @@error FehlerNR, count(*)
Anzahl, getdate() Zeit FROM X


Die zweite Insert-Anweisung sollte eigentlich eine Fehlermeldung in meine
Logtabelle schreiben, tut es aber nicht. In meiner Logdatei sehe ich daher
immer nur den Datensatz zur letzten erfolgreich importierten Tabelle. Zur
Info, die openquery-Syntax brauche ich um andere Kompatibilitàtsprobleme zu
umgehen, manche meiner Tabellen kommen auch ohne aus.

Das alles habe ich mir aus verschiedenen Quellen zusammengestoppelt und
funktioniert halt nicht.

Wie macht man die Prozedur so, dass der Abbruch der Prozedur überhaupt
vermieden wird und ggf. aufgezeichnet? Im Sinne von: "Wenn es keine Probleme
gibt dann führe truncate und insert aus, falls es Probleme gibt mach nichts,
schreib einen Fehler in die Logdatei und mach mit der nàchsten Tabelle
weiter."

Oder: Kann ich meiner Datenbank beibringen, falsche Datumswerte zu
ignorieren?

Viele Grüsse

arno
 

Lesen sie die antworten

#1 Stefan Hoffmann
29/05/2008 - 12:37 | Warnen spam
hallo Arno,

arno schrieb:
Oder: Kann ich meiner Datenbank beibringen, falsche Datumswerte zu
ignorieren?


Filtere auf Firebirdebene die ungültigen Datumswerte aus:

INSERT INTO X
SELECT
*
FROM
OPENQUERY(
LSERVER,
'SELECT * FROM X WHERE <datumswert> = <sqlserverbereich>'
)


mfG

Ähnliche fragen