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)
'DB > RDBMS' 카테고리의 다른 글
[PostgreSQL] COPY 사용 불가 (SQL Error 42501) (0) | 2020.04.27 |
---|---|
[MSSQL] OPENQUERY 대용량 DML 작업 시 문제점 (0) | 2020.04.22 |
[MSSQL] IF-ESLE (0) | 2020.04.10 |
[MSSQL] OPENQUERY로 다른 DB 사용하기 (0) | 2020.04.10 |
[MSSQL] DECLARE 변수 선언 (0) | 2020.04.10 |