In DB2 ist es mit Hilfe von Coalesce und der Skalarfunktion raise_error möglich, einen Fehler auszulösen, wenn eine Unterabfrage keine Ergebnisse zurückgibt.
Aber wie kann das in SQL Server gemacht werden?
Ich habe bisher Skalarfunktionen überprüft, aber es gibt keine Raise-Error-Funktion, die in einer einzigen Abfrage verwendet werden kann.
Der Anwendungsfall besteht darin, während eines Exports von Millionen von Datensätzen einen passenden Wert in einer anderen Tabelle zu finden. Daher wird für jeden Datensatz in der Abfrage nach einem übereinstimmenden Wert gesucht. Die Idee ist, einen Fehler auszulösen, wenn es keinen übereinstimmenden Wert für einen Datensatz gibt, damit er frühzeitig erkannt wird und nicht, nachdem die gesamte Abfrage ausgeführt wurde.
Beispiel für db2 (Hinweis: die Unterabfrage muss durch etwas Sinnvolles ersetzt werden...):
SELECT
COALESCE(
(SELECT 1 FROM SYSIBM.SYSDUMMY1 LIMIT 0),
RAISE_ERROR('70NUL', 'Value is missing'))
FROM
SYSIBM.SYSDUMMY1;
Lösung des Problems
Dies ist die Lösung, mit der ich fortfahren werde:
SELECT COALESCE ((select 1), 'Query aborted. This is the error message' / 0);
-- returns 1
SELECT COALESCE ((select null), 'Query aborted. This is the error message' / 0);
-- query aborts showing message
SELECT COALESCE ((select null WHERE 1=2), 'Query aborted. This is the error message' / 0);
-- query aborts showing message
Keine Kommentare:
Kommentar veröffentlichen