반응형
- /**********************************************************************************************
-- 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
*/
반응형