t-sql - Unterabfrage in eine variable
Ich kann nicht scheinen, um herauszufinden, wie die Belastung der Wert, der zurückgegeben wird, durch den folgenden Ausdruck/Unterabfrage in eine variable:
declare @var int
set @var = null
IF @var IS NULL
SELECT @var = t.col_one
FROM my_table t
WHERE t_datetime = (SELECT MAX(t_datetime) FROM t WHERE t.col_two = 1)
Wie kann ich laden Sie das Ergebnis des Ausdrucks in der variable?
Habe ich aktualisiert, der code entsprechend Antworten aber das Problem hat weiterhin Bestand. Es gibt keine Fehler, aber später in meinem sproc, wenn ich rufe @var
ist die variable noch null. Was bedeutet dies immer noch nicht funktioniert. Später im code, den ich verwende:
t.col_three = @var
Weiter ich bin nicht mit t.col_three = @var or @var is null
da die variable nicht null sein darf:
- Sie bekommen eine Fehlermeldung? Wenn ja, was? Das sollte funktionieren, solange die Unterabfrage gibt genau eine Zeile und die variable wird einem kompatiblen Datentyp.
- Keine Fehler. @var ist einfach nicht einlegen/Auffüllen das Ergebnis.
- Hat die Abfrage einen beliebigen Wert obwohl?
- Ich Wünsche es nicht... Nein ist es nicht. Weil ich bin nicht mit
t.col_three = @var or @var is null
nichts zurückgegeben. Wenn ich nicht verwenden, die ist, wird NULL zurückgegeben. - Also, werden Sie sagen, dass die Abfrage gibt keine Ergebnisse zurück, wenn Sie lief, ohne die Zuweisung an die variable? Würde es Sinn machen, für die variable zu bleiben
NULL
wenn das der Fall ist... - Vielleicht kannst du das ganze SQL-Skript?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen Sie, die Abfrage der unten. Ich werde das erreichen, was Sie benötigen, ohne die Verwendung von sub-queries und es kehrt immer maximal 1 Ergebnis im Gegensatz zu Ihrer Abfrage.
Versuchen
Außerdem sicher, dass die Abfrage nur eine Zeile zurückgibt.
Zum Beispiel, fügen Sie so etwas wie dieses Recht, bevor Sie Ihre Abfrage:
und sehen, ob es den Fehler auslöst.
So lange, wie Sie Ihre Abfrage nur eine Zeile zurückgibt, entweder EINSTELLEN, oder WÄHLEN Sie einwandfrei funktionieren. Sie können die Verwendung von Aggregatfunktionen wie MAX, um sicherzustellen, dass Sie nur eine Zeile, oder Sie können WÄHLEN Sie 1 TOP-um sicherzustellen, dass Sie nur eine Zeile zurückgeben. Wenn Sie verwenden Sie 1 TOP -, obwohl, achten Sie darauf, UM Ihre Anfrage in einer Weise, die Ihnen die Zeile, die Sie wollen.
Beim setzen einer Variablen auf diese Weise, ich bevorzuge TOP 1 nur als Schutz -- ein Vorgang wie dieser ist wirklich auf der Suche nach einem diskreten Wert, und die Abfrage geschrieben werden soll, in das auch so.