반응형
  1. /**********************************************************************************************
    -- Title : [2k5] 프로시저 내 로컬 변수 사용 금지 데모
    -- Reference : mcpworld.com
    -- Key word : procedure local variables
    **********************************************************************************************/
    --CLEAN UP
    /*
    USE AdventureWorks
    GO

    DROP PROC TESTPROC1
    DROP PROC TESTPROC2
    GO
    */

    USE AdventureWorks
    GO

    --임시 프로시저 생성 - TESTPROC1
    CREATE PROC TESTPROC1 @a int AS
     SELECT p.ProductID, p.Name, p.ProductNumber
     FROM Production.Product p
     INNER JOIN Production.ProductDescription pd
     ON p.ProductID = pd.ProductDescriptionID
     WHERE p.ProductID >= @a
    GO

    --실제 실행 계획(CTRL+M)을 표시한 후, 다음을 수행 (Merge Join vs Nested Loops Join)
    DBCC FREEPROCCACHE
    GO
    EXEC dbo.TESTPROC1 170
    GO

    DBCC FREEPROCCACHE
    GO
    EXEC dbo.TESTPROC1 900
    GO

    --임시 프로시저 생성 - TESTPROC2
    CREATE PROC TESTPROC2 @a INT AS
     DECLARE @LocalVal int    -- 로컬 변수 사용
     SET @LocalVal = @a + 1000 - 1000  -- 입력된 매개변수에 대한 조작

     SELECT p.ProductID, p.Name, p.ProductNumber
     FROM Production.Product p
     INNER JOIN Production.ProductDescription pd
     ON p.ProductID = pd.ProductDescriptionID
     WHERE p.ProductID >= @LocalVal  -- 로컬변수를 이용
    GO

    --실제 실행 계획(CTRL+M)을 표시한 후, 다음을 수행 (모두 Merge Join)
    DBCC FREEPROCCACHE
    GO
    EXEC dbo.TESTPROC2 170
    GO
    DBCC FREEPROCCACHE
    GO
    EXEC dbo.TESTPROC2 900
    GO

    --CLEAN UP
    /*
    USE AdventureWorks
    GO
    DROP PROC TESTPROC1
    DROP PROC TESTPROC2
    GO
    */
반응형

+ Recent posts