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
)
);
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
Du musst angemeldet sein, um einen Kommentar abzugeben.
versuchen
InformationsquelleAutor Chris Bednarski
Sie auf NULL gesetzt, die Datensätze, die nicht existieren Datensätze in sample_table mit identifyingnumber gleich sample_identifyingnumber:
Setzen Sie auf MIN (DISTINCT sampleid) das Feld sampleid, für die es in sample_table Datensätze, in denen identifying_number = sample_identifyingnumber:
Ich geschrieben habe MIN (DISTINCT ...) in Fall finden wir mehr sampleids entsprechend der gleichen identifyingnumber: in diesem unglücklichen Fall, dass ich mit dem MINIMUM der X - (mit X streng > 1) unterschiedliche sampleids.
Brauche ich zwei updates statt.
MIN
müssen Sie nichtDISTINCT
Du hast Recht, MIN nimmt der niedrigste Wert.
InformationsquelleAutor UltraCommit