반응형
SQL Server 에서 오픈쿼리 사용 시 8000자를 넘어가면 실행이 불가능하다.
오픈쿼리 특성 상 테이블변수를 사용하지 못하기에 WHERE 절에서 IN 으로 조회하게 되는데
대상이 많아지면 8000자를 넘는일이 자주 발생한다.
예제
DECLARE @V_TABLE TABLE
(
ORD_NO INT ,
ORD_NAME VARCHAR(30)
)
DECLARE @QUERY NVARCHAR(MAX)
DECLARE @MULTI_ORD_NO NVARCHAR(MAX)
-- 1. 대상 테이블로 받을 때 행 별 콤마 추가
-- ex) 1,2,3
SELECT @MULTI_ORD_NO = STRING_AGG(CAST(ORD_NO AS NVARCHAR(MAX)), ',') FROM (SELECT ORD_NO FROM @V_TABLE) A
SET @QUERY = N'
SELECT 1 FROM A WHERE KEY IN ('+ @MULTI_ORD_NO +')
'
EXECUTE (@QUERY) AT LINKED_SERVER
참고로 STRING_AGG 할 때 꼭 NVARCHAR(MAX)로 캐스팅해서 써야 한다.
반응형
'MSSQL' 카테고리의 다른 글
[MS SQL] ORDER BY CASE 정렬 조건 (0) | 2021.04.13 |
---|---|
[MS SQL] 트리거 특정 컬럼 변경 시(업데이트) 작동 (0) | 2021.03.23 |
[MS SQL] IF EXISTS 테이블 존재 유무 확인 조건문 (0) | 2020.06.11 |
MS SQL Express 자동 백업 스케줄러 설정 (2) | 2020.05.05 |
MS SQL TCP/IP 접속 에러 해결 (0) | 2020.05.05 |