Como definir a variável a partir de uma consulta SQL?

estou a tentar definir uma variável a partir de uma consulta SQL:

declare @ModelID uniqueidentifer

Select @ModelID = select modelid from models
where areaid = 'South Coast'
Obviamente, não estou a fazer isto bem, porque não funciona. Alguém pode sugerir uma solução?

Obrigado!

Author: Tadmas, 2010-10-20

6 answers

Usando seleccionar:

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

Usando o conjunto:

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

Veja esta questão para ver a diferença entre usar seleccionar e definir em TSQL.

Aviso

Se esta opção indicar devolve vários valores (mau para começar):

  • ao usar SELECT, à variável é atribuído o último valor que é devolvido (como womp disse), sem qualquer erro ou aviso (isto pode causar erros lógicos)
  • ao usar SET, um erro irá ocorrer
 385
Author: OMG Ponies, 2017-05-23 12:26:32
SELECT @ModelID = modelid
FROM Models
WHERE areaid = 'South Coast'

Se a sua declaração select devolve vários valores, à sua variável é atribuído o último valor que é devolvido.

Para referência ao usar Seleccionar com variáveis: http://msdn.microsoft.com/en-us/library/aa259186%28SQL.80%29.aspx

 20
Author: 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
Author: greg121, 2016-05-18 09:04:57
{[[2]} prefiro apenas ajustá - lo a partir da declaração de declaração
DECLARE @ModelID uniqueidentifer = (SELECT modelid 
                                    FROM models
                                    WHERE areaid = 'South Coast')
 8
Author: Joshua Duxbury, 2017-12-06 11:10:28

Usar TOP 1 caso contrário, poderá causar erro se a consulta devolve várias linhas.

SELECT TOP 1 @ModelID = m.modelid 
  FROM MODELS m
 WHERE m.areaid = 'South Coast'
 4
Author: manu vijay, 2018-03-01 18:09:49
Select @ModelID =m.modelid 
From   MODELS m
Where  m.areaid = 'South Coast'
Neste caso, se tiver dois ou mais resultados devolvidos, o resultado é o último registo. Portanto, esteja ciente disso se você pode ter mais dois registros retornados como você pode não ver o resultado esperado.
 1
Author: Mohammad Farahani, 2018-04-30 11:06:21