403 votes

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'

Manifestement, je ne m'y prends pas de la bonne façon, car cela ne fonctionne pas. Quelqu'un peut-il me suggérer une solution ?

Merci de votre attention !

1 votes

3 votes

Il s'agit d'un identifiant unique. Pas identificateur unique.

628voto

OMG Ponies Points 144785

Utilisation SELECT

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

Utilisation SET

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

Voir cette question pour la différence entre l'utilisation de SELECT et de SET dans TSQL .

Avertissement

Si cette SELECT retour de la déclaration valeurs multiples (mauvais au départ) :

  • Lors de l'utilisation de SELECT la variable se voit attribuer la dernière valeur renvoyée (comme l'a dit womp), sans erreur ni avertissement (ce qui peut provoquer des bogues logiques).
  • Lors de l'utilisation de SET une erreur se produit

4 votes

Si cette instruction select renvoie plusieurs valeurs : dans le premier cas, la variable se voit attribuer la dernière valeur renvoyée (comme l'a dit womp), sans erreur ni avertissement (cela peut provoquer des bogues logiques) ; dans le second cas, une erreur se produit.

3 votes

BTW, le cas utilisant SET a besoin d'une paire de supports : SET @ModelID = (SELECT ...)

2 votes

J'utiliserais TOP 1 avec select, pour n'avoir qu'un seul résultat, par exemple SET @ModelID = (SELECT TOP 1 m.modelid FROM MODELS m WHERE m.areaid = 'South Coast')

47voto

womp Points 71924
SELECT @ModelID = modelid
FROM Models
WHERE areaid = 'South Coast'

Si votre instruction select renvoie plusieurs valeurs, votre variable se voit attribuer la dernière valeur renvoyée.

Pour plus d'informations sur l'utilisation de SELECT avec des variables : http://msdn.microsoft.com/en-us/library/aa259186%28SQL.80%29.aspx

35voto

greg121 Points 162
declare @ModelID uniqueidentifer

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

select @ModelID

20voto

Joshua Duxbury Points 1969

Je préfère le définir à partir de l'énoncé de la déclaration

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

12voto

manu vijay Points 327

Utilisation TOP 1 si la requête renvoie plusieurs lignes.

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X