반응형
효율적인 동적쿼리 실행을 위해 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 |