Comment définir une variable à partir d'une requête SQL?

j'essaie de définir une variable à partir d'une requête SQL:

declare @ModelID uniqueidentifer

Select @ModelID = select modelid from models
where areaid = 'South Coast'

évidemment, je ne fais pas ça bien car ça ne marche pas. Quelqu'un peut-il proposer une solution?

Merci!

220
demandé sur Tadmas 2010-10-20 08:02:50

6 réponses

utilisant SELECT:

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

utilisant SET:

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

voir la différence entre L'utilisation de SELECT et celle de TSQL .

avertissement

Si cette instruction select renvoie plusieurs valeurs (mauvais pour commencer):

  • Lorsqu'on utilise SELECT , la variable se voit attribuer la dernière valeur qui est retourné (comme dit womp), sans aucune erreur ou avertissement (cela peut causer des bogues logiques)
  • lors de l'utilisation de SET , une erreur se produira
385
répondu OMG Ponies 2017-05-23 12:26:32
SELECT @ModelID = modelid
FROM Models
WHERE areaid = 'South Coast'

si votre état select renvoie plusieurs valeurs, votre variable se voit attribuer la dernière valeur retournée.

pour référence sur L'utilisation de SELECT avec les variables: http://msdn.microsoft.com/en-us/library/aa259186%28SQL.80%29.aspx

20
répondu womp 2010-10-20 04:04:23
declare @ModelID uniqueidentifer

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

select @ModelID
19
répondu greg121 2016-05-18 09:04:57

je préfère juste le régler à partir de la déclaration de déclaration

DECLARE @ModelID uniqueidentifer = (SELECT modelid 
                                    FROM models
                                    WHERE areaid = 'South Coast')
8
répondu Joshua Duxbury 2017-12-06 11:10:28

utiliser TOP 1 sinon cela pourrait causer une erreur si la requête retourne plusieurs lignes.

SELECT TOP 1 @ModelID = m.modelid 
  FROM MODELS m
 WHERE m.areaid = 'South Coast'
4
répondu manu vijay 2018-03-01 18:09:49
Select @ModelID =m.modelid 
From   MODELS m
Where  m.areaid = 'South Coast'

dans ce cas, si vous avez plusieurs résultats retournés, votre résultat est le dernier enregistrement. Donc, être conscient de ce si vous pourriez avoir deux enregistrements renvoyés que vous ne pourriez pas voir le résultat attendu.

1
répondu Mohammad Farahani 2018-04-30 11:06:21