본문 바로가기
DB/RDBMS

[MSSQL] OPENQUERY에 변수 사용 시 문제점 및 해결방법

by 소라둥이 2020. 4. 14.

DECLARE @ID VARCHR(100)

SET @ID = 'USER123'

 

DELETE T1 FROM OPENQUERY(DEV, SELECT * FROM TBL_MEMBER WHERE ID = @ID) AS T1

 

이렇게 OPENQUERY 안에 MSSQL의 DECLARE 변수 사용 시 에러가 발생한다.

 


 

해결방법은 OPENQUERY를 변수에 담아 실행시키는 방법이 있다.

 

DECLARE @ID VARCHR(100), @OPENSQL NVARCHR(1000);

SET @ID = 'USER123'

 

SET @OPENSQL =

  N'DELETE T1 FROM OPENQUERY(DEV, SELECT * FROM TBL_MEMBER WHERE ID = '+ @ID +') AS T1'

EXECUTE SP_EXCUTESQL @OPENSQL

 

 


 

여기서 EXECUTE SP_EXCUTESQL 는 매개변수의 값이  바뀌어도 컴파일 없이 바로 실행해준다.

즉, 바인드 변수와 역할이 비슷하다고 볼 수 있다.(동적 쿼리)

 

SP_EXCUTESQL 사용 시 주의점은 NVARCAR를 사용해야한다. VARCHAR 사용 시 에러가 발생한다.

 

VARCHR - 가변 문자열 (영문, 숫자 1Byte / 한글 등 나머지 2Byte)
NVARCHR - 가변 유니코드 문자열 (모든 문자, 숫자 2Byte)