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