451 Stimmen

Wie setzt man 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, denn es funktioniert nicht. Kann mir jemand eine Lösung vorschlagen?

Danke!

692voto

OMG Ponies Punkte 312816

Verwendung von 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 zum Unterschied zwischen der Verwendung von SELECT und SET in TSQL .

Warnung

Wenn diese SELECT Anweisung kehrt zurück mehrere Werte (schlecht für den Anfang):

  • Bei der Verwendung von SELECT wird der Variable der letzte Wert zugewiesen, der zurückgegeben wird (wie womp sagte), ohne Fehler oder Warnung (dies kann zu logischen Fehlern führen)
  • Bei der Verwendung von SET wird ein Fehler auftreten

53voto

womp Punkte 113535
SELECT @ModelID = modelid
FROM Models
WHERE areaid = 'South Coast'

Wenn Ihre Select-Anweisung mehrere Werte zurückgibt, wird Ihrer Variablen der zuletzt zurückgegebene Wert zugewiesen.

Als Referenz für die Verwendung von SELECT mit Variablen: http://msdn.microsoft.com/en-us/library/aa259186%28SQL.80%29.aspx

42voto

greg121 Punkte 844
declare @ModelID uniqueidentifer

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

select @ModelID

30voto

Joshua Duxbury Punkte 4430

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

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

17voto

manu vijay Punkte 337

Utilice TOP 1 wenn die Abfrage mehrere Zeilen zurückgibt.

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X