본문 바로가기

프로그래밍/MSSQL

[MSSQL] sp_executesql 사용 (EXECUTE sp_executesql vs EXEC)

반응형

 

 

효율적인 동적쿼리 실행을 위해 sp_executesql 저장 프로시저를 사용해보자

 

 

sp_executesql

- sp_executesql 저장 프로시저는 매개 변수 대체를 지원하기 때문에 EXECUTE보다 융통성이 뛰어나다.

- sp_executesql은 SQL Server에서 재사용이 쉬운 실행 계획을 생성하므로 sp_executesql이 EXECUTE 문보다 효율적이다.

 

 

CREATE PROCEDURE [dbo].[USP_TEST_PROC]
    @in_Name VARCHAR(20) = '',
    @in_Age INT = ''
AS
BEGIN
 
    DECLARE @query VARCHAR(MAX);
    DECLARE @whereQuery VARCHAR(MAX);
 
    SET @query = '';
    SET @whereQuery = '';
 
    IF (@in_Name <> '')
        BEGIN
            SET @whereQuery = N' AND A.Name = ''' + @in_Name + ''' '
        END
 
    IF (@in_Age > 0)
        BEGIN
            SET @whereQuery = N' AND A.Age = ''' + @in_Age + ''' '
        END
 
    SET @query = N'SELECT *
                    FROM TBL_TEST_TABLE A
                        INNER JOIN TBL_TEST_TABLE2 B ON A.ID = B.ID
                    WHERE 1=1'
 
    /*****************************************************************/
 
    -- 1. EXECUTE 사용
    EXEC (@query + @whereQuery)
 
    -- 2. sp_executesql 사용
    DECLARE @SQLString NVARCHAR(MAX);
    DECLARE @ParmDefinition NVARCHAR(500);
 
    SET @SQLString = @query + @whereQuery;
 
    SET @ParmDefinition = N'@in_Name    VARCHAR(20),
                            @in_Age        INT'
 
    EXECUTE sp_executesql
        @SQLString,
        @ParmDefinition,
        @in_Name = @in_Name,
        @in_Age = @in_Age
 
END
 

 

 

 

...더보기

[참고]

https://technet.microsoft.com/ko-kr/library/ms175170(v=sql.105).aspx

 

 

 

반응형