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 le fais pas correctement car cela ne fonctionne pas. Quelqu'un peut-il suggérer une solution?
Merci!
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')
Voir cette question pour la différence entre utiliser SELECT et SET dans TSQL .
Si cette instruction select retourne plusieurs valeurs (mauvais au début):
SELECT
, la variable reçoit la dernière valeur renvoyée (comme le dit womp), sans erreur ni avertissement (cela peut provoquer des bogues logiques)SET
, une erreur se produiraSELECT @ModelID = modelid
FROM Models
WHERE areaid = 'South Coast'
Si votre instruction select renvoie plusieurs valeurs, la dernière valeur renvoyée est affectée à votre variable.
Pour plus d'informations sur l'utilisation de SELECT avec des variables: 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
Je préfère simplement le définir à partir de l'instruction declare
DECLARE @ModelID uniqueidentifer = (SELECT modelid
FROM models
WHERE areaid = 'South Coast')
Utilisez TOP 1
si la requête renvoie plusieurs lignes.
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'
Dans ce cas, si vous avez deux résultats ou plus renvoyés, votre résultat est le dernier enregistrement. Sachez donc que si deux autres enregistrements peuvent être renvoyés, vous risquez de ne pas voir le résultat attendu.
Vous pouvez l'utiliser, mais souvenez-vous que votre requête donne 1 résultat, plusieurs résultats renverront l'exception.
declare @ModelID uniqueidentifer
Set @ModelID = (select Top(1) modelid from models where areaid = 'South Coast')
Autrement:
Select Top(1)@ModelID = modelid from models where areaid = 'South Coast'