setzen Sie die variable auf NULL gesetzt, wenn geschachtelte Abfrage gibt keine Ergebnisse zurück

Angenommen, Sie haben die folgende Abfrage. Wenn die verschachtelte Abfrage NULL(0 Ergebnisse), die gespeicherte Prozedur stürzt mit folgender Fehlermeldung, die unten erwähnt werden. Ich fand heraus, ich kann wieder schreiben den code in die Alternative Abfrage unten, aber ich bin zu wollen eine einfachere syntax zu schreiben. Ich habe über 10 von diesen, und einige haben mehrere verschachtelte Abfragen. Gibt es ein einfacher Weg, Sie zu schreiben? Ich bin kein Experte in SQL, so bin ich immer auf der Suche nach Anregungen! Danke.

Abfrage (manchmal Abstürze):

SET @sampleid = (
    SELECT 
        [sampleid]
    FROM [sample]
    WHERE [identifyingnumber] = @sample_identifyingnumber

Fehler in Abfrage:

Subquery returned more than 1 value. This is not permitted when the subquery
follows =, !=, <, <= , >, >= or when the subquery is used as an expression.

Alternative Abfrage, die nie abstürzt:

IF 
(
    SELECT 
        COUNT([sampleid])
    FROM [sample]
    WHERE [identifyingnumber] = @sample_identifyingnumber
) = 0
BEGIN
SET @sampleid = NULL
END
ELSE
BEGIN
SET @sampleid =
(
    SELECT 
        DISTINCT [sampleid]
    FROM [sample]
    WHERE [identifyingnumber] = @sample_identifyingnumber
)
END

===============

Beispiel, das etwas komplexer:

SET @testcodeid = (
    SELECT 
        [testcodeid]
    FROM [testcode]
    WHERE [testcode].[name] = (
        SELECT [test_code]
        FROM [ws_test_request]
        WHERE [client_id] = @clientid
          AND [sample_specimen_id] = @sample_identifyingnumber
    )
);  
Es sei denn, die Fehler, die Sie erwähnt haben ist das eine, die Auftritt, wenn mehrere Ergebnisse zurückgegeben werden, sind nicht null, und behoben ist, indem Sie hinzufügen, die "distinct" keyword in alternativen Abfrage...
Einmal habe Sie geschrubbt die Daten, betrachten Sie die Lösung des Problems eine Wiederholung zu verhindern, indem ein Fremdschlüssel mit der ON DELETE SET NULL referenzielle Aktion (oder im Idealfall zu entfernen nullwertfähige Spalten aus der Datenbank vollständig 😉

InformationsquelleAutor MacGyver | 2011-05-13

Schreibe einen Kommentar