it-swarm.com.de

Wie setze ich eine Variable aus einer SQL-Abfrage?

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!

272
Mr Cricket

Mit SELECT:

SELECT @ModelID = m.modelid 
  FROM MODELS m
 WHERE m.areaid = 'South Coast'

Verwendung von SET:

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 .

Warnung

Wenn diese select-Anweisung mehrere Werte zurückgibt (anfangs schlecht):

  • Bei Verwendung von SELECT wird der Variablen der letzte zurückgegebene Wert zugewiesen (wie bereits erwähnt), ohne Fehler oder Warnung (dies kann zu Logikfehlern führen).
  • Bei Verwendung von SET tritt ein Fehler auf
459
OMG Ponies
SELECT @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

28
womp
declare @ModelID uniqueidentifer

--make sure to use brackets
set @ModelID = (select modelid from models
where areaid = 'South Coast')

select @ModelID
26
greg121

Ich ziehe es vor, es einfach aus der declare-Anweisung zu setzen

DECLARE @ModelID uniqueidentifer = (SELECT modelid 
                                    FROM models
                                    WHERE areaid = 'South Coast')
11
Joshua Duxbury

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'
9
manu vijay
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.

3

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'
1