GOOGLE ADS

Samstag, 16. April 2022

Löst einen Fehler aus, wenn eine Unterabfrage kein Ergebnis zurückgibt (MS SQL SERVER)

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

Warum werden SCHED_FIFO-Threads derselben physischen CPU zugewiesen, obwohl CPUs im Leerlauf verfügbar sind?

Lösung des Problems Wenn ich das richtig verstehe, versuchen Sie, SCHED_FIFO mit aktiviertem Hyperthreading ("HT") zu verwenden, ...