MS-SQL Server

sp_executesql 사용에 관한 고민..

알 수 없는 사용자 2007. 11. 28. 11:35


sql 인젝션이나 실행계획 재사용의 문제로 SP 작성시 동적쿼리를 사용하지 않는게 일반적인걸로 알고 있습니다.
그런데 sp_executesql 을 이용하여 쿼리를 동적으로 생성하고 각 값들은 파라메터화 하여 사용한다면 위의 문제가 발생하지 않을것 같다는 생각이 듭니다.
실제로 테스트 해보니 쿼리가 변경되지 않았다면 파라메터가 변경되어도 기존에 생성해 놓은 실행 계획을 재사용하는것을 확인하였습니다.


[이 sp_executesql 을 사용했을때 생각되는 문제점]

     1. 조건에 따라 너무 많은 경우의 쿼리가 생성된다면 실행계획도 그만큼 생성되므로 이런 경우는 사용하지 말아야 할것 같습니다.
     2. 쿼리 검수시 들어오는 조건을 DBA가 파악하고 있어야 한다. 그런데 조건을 알고 있어도 쿼리의 부분들을 조합해서 완성된 쿼리를 만들고 그걸 가지고 검수를 하는것도 힘들것 같습니다. 개발자에게 쿼리 완성본을 따로 요청해서 해결해야 할까요? ㅎㅎ 잘 모르겠습니다. -ㅅ-;;
     3. 아무래도 동적 쿼리를 처리하면서 CPU를 약간 더 잡아먹을것 같습니다.

[이 sp_executesql 을 사용했을때 생각되는 이득]
     1. 여러 조건에 따라 각각 SP를 생성하지 않아도 되므로 SP 수정이 발생할 경우 동일한 로직의 SP 들을 찾아서 모두 고쳐주는 수고를 줄일 수 있다.
     2. 조건의 수가 허용할 수만큼인 경우 그리고 테이블명이 동적일때처럼 해당 조건마다 SP를 생성했다 지웠다 작업을 자동으로 해주지 못할 경우 자동화 할 수 있다.


사용했을때 추가적으로 어떤 문제와 어떤 이득이 있을까요? ㅎㅎ
그리고 우리는 이런 sp_executesql을 사용한 동적쿼리를 허용해 줄 수 있을까요?


하만철 / Ha Man-cheol