code

SQL 쿼리에서 변수를 설정하는 방법

starcafe 2023. 4. 8. 09:04
반응형

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');

그럼, 을 사용할 수 있습니다.SELECT가치를 나타내다@ModelID변수를 코드에 사용할 수도 있습니다.

SELECT @ModelID

TSQL에서 SELECT와 SET를 사용하는 경우의 차이는 이 질문을 참조하십시오.

경고

이 경우SELECT문이 여러 값을 반환합니다(처음에는 잘못됨).

  • 사용시SELECT이 변수에는 에러나 경고 없이 마지막으로 반환된 값이 할당됩니다(womp가 말한 바와 같이).이로 인해 로직 버그가 발생할 수 있습니다).
  • SET쿼리 끝에 세미콜론을 넣지 않은 경우에만 쿼리가 오류를 반환합니다.
SELECT @ModelID = modelid
FROM Models
WHERE areaid = 'South Coast'

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

변수와 함께 SELECT를 사용하는 방법에 대한 자세한 내용은http://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'

다음 3가지 접근법이 있습니다.

  1. 선언하다
  2. SET -- Microsoft 권장 접근법
  3. 선택한다.

아래 쿼리에서는 각각의 장점과 단점을 자세히 설명합니다.

-- First way, 
DECLARE @test int = (SELECT 1)
       , @test2 int = (SELECT a from (values (1),(2)) t(a)) -- throws error

-- advantage: declare and set in the same place
-- Disadvantage: can be used only during declaration. cannot be used later

-- Second way
DECLARE @test int  
       , @test2 int 

SET @test = (select 1)
SET @test2 = (SELECT a from (values (1),(2)) t(a)) -- throws error

-- Advantage: ANSI standard. 
-- Disadvantage: cannot set more than one variable at a time

-- Third way
DECLARE @test int, @test2 int 
SELECT @test = (select 1)
      ,@test2 = (SELECT a from (values (1),(2)) t(a)) -- throws error

-- Advantage: Can set more than one variable at a time
-- Disadvantage: Not ANSI standard

이를 사용할 수 있지만 쿼리는 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'

이 경우 반환된 결과가 두 개 이상이면 결과가 마지막 레코드가 됩니다.따라서 예상한 결과가 표시되지 않을 수 있으므로 2개의 레코드가 더 반환될 수 있는 경우에는 이 점에 유의하십시오.

SQL을 사용하여 변수를 할당하려면 다음과 같은 베스트 프랙티스를 선택합니다.

->DECLARE co_id INT ;
->DECLARE sname VARCHAR(10) ;

->SELECT course_id INTO co_id FROM course_details ;
->SELECT student_name INTO sname FROM course_details;

한 줄에 두 개 이상의 변수를 할당해야 하는 경우 동일한 SELECT INTO를 사용할 수 있습니다.

->DECLARE val1 int;
->DECLARE val2 int;

->SELECT student__id,student_name INTO val1,val2 FROM student_details;

--HAPPY CODING-- 

언급URL : https://stackoverflow.com/questions/3974683/how-to-set-variable-from-a-sql-query

반응형