valor - ¿Cómo establecer la variable de una consulta SQL?
variables @@ sql server (6)
Estoy tratando de establecer una variable de una consulta SQL:
declare @ModelID uniqueidentifer
Select @ModelID = select modelid from models
where areaid = ''South Coast''
Obviamente no estoy haciendo esto bien ya que no funciona. ¿Alguien puede sugerir una solución?
¡Gracias!
Utilizando SELECT:
SELECT @ModelID = m.modelid
FROM MODELS m
WHERE m.areaid = ''South Coast''
Utilizando SET:
SET @ModelID = (SELECT m.modelid
FROM MODELS m
WHERE m.areaid = ''South Coast'')
Vea esta pregunta para ver la diferencia entre usar SELECT y SET en TSQL .
Advertencia
Si esta declaración de selección devuelve varios valores (mal para empezar):
- Cuando se utiliza
SELECT
, a la variable se le asigna el último valor que se devuelve (como dijo womp), sin ningún error o advertencia (esto puede causar errores lógicos) - Al usar
SET
, se producirá un error.
Prefiero simplemente configurarlo desde la declaración de declaración
DECLARE @ModelID uniqueidentifer = (SELECT modelid
FROM models
WHERE areaid = ''South Coast'')
Utilice TOP 1
contrario, podría causar un error si la consulta devuelve varias filas.
SELECT TOP 1 @ModelID = m.modelid
FROM MODELS m
WHERE m.areaid = ''South Coast''
SELECT @ModelID = modelid
FROM Models
WHERE areaid = ''South Coast''
Si su declaración de selección devuelve varios valores, a su variable se le asigna el último valor que se devuelve.
Para referencia sobre el uso de SELECT con variables: http://msdn.microsoft.com/en-us/library/aa259186%28SQL.80%29.aspx
Select @ModelID =m.modelid
From MODELS m
Where m.areaid = ''South Coast''
En este caso, si tiene dos o más resultados devueltos, su resultado es el último registro. Por lo tanto, tenga en cuenta esto si puede que le devuelvan dos registros más, ya que es posible que no vea el resultado esperado.
declare @ModelID uniqueidentifer
--make sure to use brackets
set @ModelID = (select modelid from models
where areaid = ''South Coast'')
select @ModelID