[sql] 스토어드 프로시저의 동적 SQL과 파라미터화 쿼리

스토어드 프로시저는 데이터베이스에서 사용자 정의 함수와 같은 기능을 수행하는 프로그램 유형입니다. 대부분의 스토어드 프로시저는 정적 SQL 문을 사용하여 쿼리를 실행하지만 때로는 동적 SQL과 파라미터화 쿼리를 사용해야 할 때가 있습니다.

동적 SQL이란 무엇인가요?

보통의 SQL 쿼리는 정적입니다. 이는 쿼리 안에 명시적으로 정의된 구조와 조건을 가지고 있으며 실행 시간에는 해당 구조와 조건이 변경되지 않습니다. 그러나 동적 SQL은 실행 시간에 도중에 변경되는 쿼리의 형식을 말합니다.

왜 동적 SQL을 사용해야 하나요?

일반적으로 동적 SQL은 쿼리의 구성을 변경할 필요가 있는 경우에 사용됩니다. 예를 들어 사용자의 입력에 따라 WHERE 절의 조건을 동적으로 추가하거나 특정 테이블의 이름을 동적으로 변경해야 하는 경우 등이 있을 수 있습니다.

파라미터화 쿼리란 무엇인가요?

파라미터화 쿼리는 동적 SQL 내에서 사용되는 방법으로, 실행 시간에 변경되는 값을 쿼리에 삽입할 때 사용됩니다. 이를 통해 쿼리가 재사용되고 보안상의 이점도 얻을 수 있습니다.

예시

다음은 SQL Server에서 동적 SQL과 파라미터화 쿼리를 사용한 스토어드 프로시저의 간단한 예시입니다.

CREATE PROCEDURE GetCustomerOrders 
    @customerId INT
AS
BEGIN
    DECLARE @sql NVARCHAR(MAX)
    SET @sql = 'SELECT * FROM Orders WHERE customerId = @custId'
    EXEC sp_executesql @sql, N'@custId INT', @customerId
END

위의 예시에서 @sql 변수를 사용하여 동적 SQL 쿼리를 생성하고, sp_executesql을 사용하여 파라미터화된 쿼리를 실행합니다. 이렇게 함으로써 쿼리의 동적인 부분과 파라미터가 분리되어 가독성과 유지보수성이 향상됩니다.

결론

동적 SQL과 파라미터화 쿼리를 사용하면 스토어드 프로시저에서 쿼리를 보다 유연하게 구성할 수 있으며, 보안상의 이점도 얻을 수 있습니다. 그러나 사용 시에는 쿼리 인젝션 등의 보안 문제에 유의해야 합니다.

이상으로 스토어드 프로시저의 동적 SQL과 파라미터화 쿼리에 대한 내용을 마치도록 하겠습니다.

참고문헌: