동적 쿼리와 정적 쿼리에 대해서 알아보자
동적 쿼리 : 특정한 조건이나 상황에 따라 변경되는 쿼리
- 조건에 따라 쿼리를 사용자가 마음대로 만들수 있지만 테스트가 어렵다는 단점이 있다
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문을 선언하여 해당 프로시져를 실행후
결과창의 메시지 탭에 스크립트를 가지고 테스트 해보면 된다.