카테고리 없음

[MS-SQL] 동적 쿼리 vs 정적쿼리

조셉LEE 2024. 4. 4. 09:19
728x90
반응형

동적 쿼리와 정적 쿼리에 대해서 알아보자 

동적 쿼리 : 특정한 조건이나 상황에 따라 변경되는 쿼리
- 조건에 따라 쿼리를 사용자가 마음대로 만들수 있지만 테스트가 어렵다는 단점이 있다

DECLARE @SQL VARCHAR(MAX) = ''
DECLARE @CNT INT = 0

SET @SQL =+ 'SELECT * FROM TEMP1 WHERE A1 = ''AAAAA'''

IF( @INT = 1)
BEGIN
SET @SQL =+ 'UNION SELECT * FROM TEMP1 WHERE A1 = ''BBBB'''
END

PRINT @SQL 

EXEC SP_EXCUTESQL @SQL


정적쿼리 : 어떤한 조건이나 상황에서도 변경되지 않는 쿼리
- 일반적으로 사용하는 쿼리문이다  
SELECT * FROM TEMP1 WHERE A1 = 'AAAA' 
UNION SELECT * FROM TEMP1 WHERE A1 = 'BBBB' 

동적 쿼리는 @CNT 변수가 1인 경우에만 UNION 을 할수 있는 반면 정적쿼리는 UNION 되어진 쿼리를 무조건 수행해야 한다.
본인이 조건에 의해서 쿼리를 작성해야 한다면 동적 쿼리를 사용하면 된다.

동적쿼리 사용하는 경우

- PIVOT을 이용하여 컬럼 명칭을 만들고자 할때 
- UNION을 조건하나만 틀리고 반복하고자 할때
- JOIN을 조건에 의해서 변경하고자 할때

가장 많이 사용한다. 단 동적 쿼리는 테스트하기가 번거로운 단점이 있다.
보통은 SP_EXCUTESQL 실행전에 담긴 변수를 print문을 선언하여 해당 프로시져를 실행후 
결과창의 메시지 탭에 스크립트를 가지고 테스트 해보면 된다. 

반응형
LIST