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!
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
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
declare @ModelID uniqueidentifer
--make sure to use brackets
set @ModelID = (select modelid from models
where areaid = 'South Coast')
select @ModelID
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')
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'
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.