DB/RDBMS
[MSSQL] OPENQUERY에 변수 사용 시 문제점 및 해결방법
소라둥이
2020. 4. 14. 11:13
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)