Ich versuche, eine Variable aus einer SQL-Abfrage zu setzen:
declare @ModelID uniqueidentifer
Select @ModelID = select modelid from models
where areaid = 'South Coast'
Offensichtlich mache ich das nicht richtig, da es nicht funktioniert. Kann jemand eine Lösung vorschlagen?
Vielen Dank!
SELECT @ModelID = m.modelid
FROM MODELS m
WHERE m.areaid = 'South Coast'
SET @ModelID = (SELECT m.modelid
FROM MODELS m
WHERE m.areaid = 'South Coast')
Siehe diese Frage für den Unterschied zwischen SELECT und SET in TSQL .
Wenn diese select-Anweisung mehrere Werte zurückgibt (anfangs schlecht):
SELECT
wird der Variablen der letzte zurückgegebene Wert zugewiesen (wie bereits erwähnt), ohne Fehler oder Warnung (dies kann zu Logikfehlern führen).SET
tritt ein Fehler aufSELECT @ModelID = modelid
FROM Models
WHERE areaid = 'South Coast'
Wenn Ihre select-Anweisung mehrere Werte zurückgibt, wird Ihrer Variablen der letzte zurückgegebene Wert zugewiesen.
Referenz zur Verwendung von SELECT mit Variablen: http://msdn.Microsoft.com/en-us/library/aa259186%28SQL.80%29.aspx
declare @ModelID uniqueidentifer
--make sure to use brackets
set @ModelID = (select modelid from models
where areaid = 'South Coast')
select @ModelID
Ich ziehe es vor, es einfach aus der declare-Anweisung zu setzen
DECLARE @ModelID uniqueidentifer = (SELECT modelid
FROM models
WHERE areaid = 'South Coast')
Verwenden Sie TOP 1
, wenn die Abfrage mehrere Zeilen zurückgibt.
SELECT TOP 1 @ModelID = m.modelid
FROM MODELS m
WHERE m.areaid = 'South Coast'
Select @ModelID =m.modelid
From MODELS m
Where m.areaid = 'South Coast'
In diesem Fall ist das Ergebnis der letzte Datensatz, wenn zwei oder mehr Ergebnisse zurückgegeben wurden. Beachten Sie dies, wenn möglicherweise zwei weitere Datensätze zurückgegeben werden, da das erwartete Ergebnis möglicherweise nicht angezeigt wird.
Sie können dies verwenden, aber denken Sie daran, dass Ihre Abfrage 1 Ergebnis liefert. Mehrere Ergebnisse lösen die Ausnahme aus.
declare @ModelID uniqueidentifer
Set @ModelID = (select Top(1) modelid from models where areaid = 'South Coast')
Ein anderer Weg:
Select Top(1)@ModelID = modelid from models where areaid = 'South Coast'