none
MS SQL Set , Select 사용 RRS feed

  • 질문

  • MS SQL SET, SELECT  둘다 똑같이 변수에 값을 할당할 수 있습니다. 하지만 경우에 따라서 다르게 사용합니다.

    예를 들어 설명해주시기 바랍니다.

    2011년 11월 4일 금요일 오전 7:22

모든 응답

  • 안녕하십니까? 김도남 님

    Microsoft TechNet Forum 사이트를 방문해 주셔서 감사합니다.

     

    문의 하신 “MS SQL Set , Select 사용에 대한 답변을 드리겠습니다.

     

    Step 1 : 쿼리 결과 값

     

    Set 명령어일 경우 하나 이상의 값이 입력을 할 수가 없습니다.

     

    DECLARE @SetVariable varchar(50)

    SET @SetVariable = (SELECT [Name] FROM Production.Product WHERE Color = 'Silver')

    PRINT @SetVariable

     

     

    Select 명령어일 경우 하나의  갑을 입력을 할 수 있습니다.

     

    DECLARE @SelectVariable varchar(50)

    SELECT @SelectVariable = [Name] FROM Production.Product WHERE Color = 'Silver'

    PRINT @SelectVariable

     

    DECLARE @variable1 VARCHAR(50)

    DECLARE @variable2 VARCHAR(50)

    DECLARE @variable3 VARCHAR(50)

     

    SELECT @variable1 = 'Value1', @variable2 = 'Value2', @variable3 = 'Value3'

    PRINT @variable1

    PRINT @variable2

    PRINT @variable3

     

    쿼리 결과 값을 할당하는 경우에는 하나 이상의 값을 반환할 수가 있어 Set 명령어보단 Selet명령어가 더 효율적입니다.
     

    Step 2 : 여러 변수 할당

     

    Select 명령어는 한 번에 하나 이상의 변수를 할당할 수 있습니다.

     

    DECLARE @variable1 VARCHAR(50)

    DECLARE @variable2 VARCHAR(50)

    DECLARE @variable3 VARCHAR(50)

     

    SELECT @variable1 = 'Value1', @variable2 = 'Value2', @variable3 = 'Value3'

    PRINT @variable1

    PRINT @variable2

    PRINT @variable3

     

     

    Set명령어는 한 번에 하나 이상의 변수를 할당할 수 없습니다.

     

    DECLARE @variable1 VARCHAR(50)

    DECLARE @variable2 VARCHAR(50)

    DECLARE @variable3 VARCHAR(50)

    SET @variable1 = 'Value1'

    SET @variable2 = 'Value2'

    SET @variable3 = 'Value3'

    PRINT @variable1

    PRINT @variable2

    PRINT @variable3

     

     

    한 번에 하나 이상의 변수에 값을 할당 할 수 없는 Set 명령어 보단 Select명령어를 사용하는게 효율적입니다.

     

     

    Step 3 : Null값 할당

     

    결과를 반환하지 않는 Select문을 이용해서 variable1 Null 값을 할당을 합니다. 아래 Script를 실행하면 Value 1 assigned만 출력을 합니다. Set은 쿼리문에서 Null값을 반환하면 저장을 합니다.

     

    DECLARE @variable1 VARCHAR(20)

    SET @variable1 = 'Value 1 Assigned'

    PRINT @variable1

    SET @variable1 = (SELECT Color FROM Production.Product WHERE ProductID = 812123)

    PRINT @variable1

     

     

    결과를 반환하지 않는 Select 쿼리문을 이용해서 variable1 Null값을 할당을 합니다. 아래의 Script를 실행하면 Value 1 assigned 두번 출력이 됩니다. Select 명령어는 Set과 다르게 Null 값을 반환하면 입력이 되지 않습니다.

     

    DECLARE @variable1 VARCHAR(20)

    SELECT @variable1 = 'Value 1 Assigned'

    PRINT @variable1

    SELECT @variable1 = Color FROM Production.Product WHERE ProductID = 812123

    PRINT @variable1

     

     

    Null값 입력 상황이 발생하면 Null값을 입력하는 Set 명령어와 달리 Select 명령어는 개발자가 예상하지 못한 결과가 발생할 수 있습니다.

     

     

    Step 4 : 사용 시나리오

     

    SET

     

    1.     Select 쿼리 결과갑을 입력하지 않고 직접 변수에 값을 입력하는 경우

    2.     Null 결과 값을 입력하는 경우

    3.     여러 변수 타입의 결과값을 입력하고 사용하는 경우

     

    SELECT

     

    1.     한 번에 여러 변수값을 할당하는 경우

     

    2.     쿼리 결과 값 즉, 하나 이상의 값을 할당하는 경우

     

    3.     @@ROWCOUNT, @ERROR를 사용하는 경우

     

    참고 자료

     

    SET Statements (Transact-SQL)

    http://msdn.microsoft.com/en-us/library/ms190356.aspx

     

    SELECT - SQL Command

    http://msdn.microsoft.com/en-us/library/h09t6a82(v=vs.80).aspx

     

    제가 문제에 대해 더 알아야 할 것이 있다면 응답 주시면 감사하겠습니다.

    제시해 드린 답변이 도움이 되었기를 바랍니다.

    2011년 11월 4일 금요일 오전 8:30
    중재자