반응형
    
    
    
  

효율적인 동적쿼리 실행을 위해 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
반응형
    
    
    
  '프로그래밍 > MSSQL' 카테고리의 다른 글
| [MSSQL] DB LOCK 확인 및 해제 (0) | 2018.02.10 | 
|---|---|
| [MSSQL] SEQUENCE 시퀀스 (0) | 2017.12.07 | 
| [MSSQL] VARCHAR 타입의 날짜를 DATETIME으로 변경 (날짜변환, 시간변환) (0) | 2017.06.23 | 
| [MSSQL] @@ROWCOUNT 영향 받은 행 수 반환 (0) | 2017.02.15 | 
| [MSSQL] GROUP BY 없이 컬럼과 함께 COUNT를 조회해보자 (COUNT OVER) (0) | 2017.02.14 |