Database/SQL Server

SQL Server - 동적 SQL Dynamic SQL

청렴결백한 만능 재주꾼 2020. 12. 23. 09:39
반응형

동적 SQL이란 ? 

정적인 것과 반대로 SQL 문이 완성되지 않은 것을 말한다. WHERE 절이나 UPDATE절 등의 조건이 프로그램이 실행 될 때 결정될 때 동적 SQL이 필요하다. 유연하게 SQL문이 완성하여 실행 될 수 있게 하는 인터페이스이다.

 

동적 SQL 특징

 - 문자열 데이터이다.

 - 시작과 끝을 나타내는 부호가 없다.

 

Example : 

Create Procedure spSearchEmployees
@FirstName nvarchar(100),
@LastName nvarchar(100),
@Gender nvarchar(50),
@Salary int
As
Begin
	
    Select * from Employees where
    (FirstName = @FirstName OR @FirstName IS NULL) AND
    (LastName  = @LastName  OR @LastName IS NULL) AND
    (Gender    = @Gender    OR @Gender IS NULL) AND
    (Salary    = @Salary    OR @Salary IS NULL)
    
End

---------

Declare @sql nvarchar(1000)
Declare @params nvarchar(1000)

Set @sql = 'Select * from Employees' + ' Where Firstname=@FirstName and LastName=@LastName'
Set @params = '@FirstName nvarchar(100), @LastName nvarchar(100)'

Execute sp_executesql @sql, @params, @FirstName='Mark', @LastName='Hastings'

아래에 쓰인 것 처럼 동적sql은 시스템 저장 프로시저 sp_executesql로 실행된다. 여기 시스템 저장 프로시저에는 2가지의 사전 정의된 매개변수가 있다.

Parameter Description
@statement 첫 번째 매개변수이고 필수적이다. 실행시킬 SQL문을 포함하고 있어야 한다.
@params 두 번째 매개변수이고 선택적이다. 이것은 첫 번째 매개변수(@statement)의 매개변수를 지정할 때 쓰인다.

 

프로시저(정적sql)와 동적sql문이 같이 있다. 같은 역할이지만 필터링이 늘어날 수록 더 복잡하게 된다. 동적sql이라해서 다 좋은 것만은 아니다. 퍼포먼스를 가져 오지만 보안 문제에 취약하다.

반응형