[MSSQL] 동적 SQL

728x90


안녕하세요. 오늘은 
라이프사이클 재무에 대한 모든 것_글라이드 유튜브 강의를 듣고 참고하여 MSSQL의 동작 SQL에 대해 포스팅을 작성하도록 하겠습니다.

 

 

동적 SQL이란?

SQL 쿼리를 문자열로 생성한 후, 그 문자열을 실행하는 방법입니다. 일반적인 SQL 쿼리와 달리, 동적 SQL은 실행 시점에 쿼리 문이 구성되므로 더 유연하게 다양한 상황에 대응할 수 있습니다.

-- 일반적인 SQL 쿼리
SELECT * FROM COMPANYINFO;

-- 동적 SQL 쿼리
EXEC('SELECT * FROM COMPANYINFO');

 

 

동적 SQL 사용 시 주의점

1. SQL 인젝션 방지 : 동적 SQL은 사용자가 입력한 값을 직접 쿼리에 포함하기 때문에 SQL 인젝션 공격에 취약할 수 있음. 이를 방지하기 위해 항상 입력값을 검증하고 필요한 경우 파라미터화된 쿼리를 사용해야함

※ SQL 인젝션이란? 공격자가 사용자 입력값을 조작하여 의도하지 않은 SQL 쿼리를 실행하게 만드는 해킹 기법

 

2. 성능 고려 : 동적 SQL은 실행 시점에 쿼리가 해석되므로, 복잡한 쿼리를 자주 생성하고 실행할 경우 성능에 영향을 줄 수 있음. 필요한 경우 캐싱이나 최적화를 고려해야함

 

 

동적 SQL 활용

동적 SQL은 다양한 상황에서 활용될 수 있지만, 특히 매개변수로 테이블명을 받아 그 테이블의 데이터를 출력하고자 할 때 유용함

 

동적 SQL을 활용한 프로시저 작성

-- 테이블의 이름을 매개변수로 받아 해당 테이블의 데이터를 출력해주는 프로시저 작성
CREATE PROC SP_SELECT_TABLE_INFO @TableName VARCHAR(3000)
AS
BEGIN
    DECLARE @sqlQuery VARCHAR(3000)
    SET @sqlQuery = 'SELECT * FROM ' + @TableName

    EXEC(@sqlQuery)
END
GO

-- 프로시저 실행
EXEC SP_SELECT_TABLE_INFO 'Stockprice';
EXEC SP_SELECT_TABLE_INFO 'Companyinfo';
  • @TableName : 프로시저가 입력받는 매개변수로, 조회하고자 하는 테이블의 이름을 지정
  • @sqlQuery : 동적으로 생성된 SQL 쿼리를 저장하는 변수
  • SET @sqlQuery : 테이블명을 포함한 SELECT 쿼리를 문자열로 생성
  • EXEC(@sqlQuery) : 생성된 SQL 쿼리를 실행

 

 

728x90