[sql] SQL 쿼리에서 변수를 설정하는 방법은 무엇입니까?

SQL 쿼리에서 변수를 설정하려고합니다.

declare @ModelID uniqueidentifer

Select @ModelID = select modelid from models
where areaid = 'South Coast'

분명히 나는 ​​그것이 작동하지 않기 때문에 이것을 올바르게하고 있지 않습니다. 누군가 해결책을 제안 할 수 있습니까?

감사!



답변

SELECT 사용 :

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

SET 사용 :

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

TSQL에서 SELECT와 SET을 사용하는 것의 차이점에 대해서는이 질문을 참조하십시오 .

경고

이 select 문이 여러 값을 반환 하는 경우 (시작하기에 나쁨) :

  • 를 사용할 때 SELECT변수에 오류나 경고없이 반환 된 마지막 값이 할당됩니다 (논리 버그가 발생할 수 있음)
  • 를 사용할 때 SET오류가 발생합니다

답변

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

select 문이 여러 값을 반환하면 변수에 마지막으로 반환 된 값이 할당됩니다.

변수와 함께 SELECT를 사용하는 방법에 대한 참조 : 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


답변

선언문에서 설정하는 것을 선호합니다.

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


답변

TOP 1쿼리가 여러 행을 반환하는 경우 사용하십시오 .

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


답변

이것을 사용할 수는 있지만 쿼리에서 1 개의 결과를 제공하면 여러 결과에서 예외가 발생합니다.

declare @ModelID uniqueidentifer
Set @ModelID = (select Top(1) modelid from models where areaid = 'South Coast')

또 다른 방법:

Select Top(1)@ModelID = modelid from models where areaid = 'South Coast'


답변

Select @ModelID =m.modelid
From   MODELS m
Where  m.areaid = 'South Coast'

이 경우 두 개 이상의 결과가 반환되면 결과가 마지막 레코드입니다. 따라서 예상 결과가 표시되지 않을 때 두 개의 레코드가 더 리턴 될 경우이를 인식하십시오.