[MS-SQL] ORDER BY 번호 1(으)로 식별되는 SELECT 항목에 열 위치를 식별하는 식의 일부로 변수가 포함되어 있습니다. 변수는 열 이름을 참조하는 식을 기준으로 정렬할 때만 사용할 수 있습니다
프로시저 내의 SELECT 쿼리의 ORDER BY 절에 @PARAM 파라미터 변수를 대입하였더니 발생한 오류이다.
ORDER BY 번호 1(으)로 식별되는 SELECT 항목에 열 위치를 식별하는 식의 일부로 변수가 포함되어 있습니다.
변수는 열 이름을 참조하는 식을 기준으로 정렬할 때만 사용할 수 있습니다
오류가 발생한 쿼리문은 다음과 같다.
SELECT * FROM TB_TEMP_TEST
WHERE a.CUSTOMER_ID = @P_CUST_ID
AND
(
@P_SEARCH_STR = '' OR
(
a.TEL_NO LIKE '%'+@P_SEARCH_STR+'%' OR
a.MOBILE_NO LIKE '%'+@P_SEARCH_STR+'%'
)
)
ORDER BY @P_ORDER_BY_TP
마이크로소프트가 제공하는 문서 사이트 오류 정보내용에 심각도는 15로 지정하고 있다.
[해결방법]
처리방법은 동적 쿼리로 변경하면 된다. 하지만 귀찮은 작업이다.
DECLARE @P_QUERY NVARCHAR(MAX) = ''
SET @P_QUERY = '
SELECT * FROM TB_TEMP_TEST
WHERE a.CUSTOMER_ID = '''+@P_CUST_ID+'''
AND
(
'''+@P_SEARCH_STR +'''= '''' OR
(
a.TEL_NO LIKE ''%'+@P_SEARCH_STR+'%'' OR
a.MOBILE_NO LIKE ''%'+@P_SEARCH_STR+'%''
)
)
ORDER BY '+@P_ORDER_BY_TP+'
OFFSET '+CONVERT(VARCHAR(10),@P_ST_INDEX)+' ROWS FETCH NEXT '+CONVERT(VARCHAR(10),@P_EN_INDEX)+' ROWS ONLY
'
EXECUTE(@P_QUERY)
계약직으로 업무를 시작한지 3개월이 넘어가니 슬슬 일이 하기 싫어진다.
하기 싫다기 보다 귀찮아진다.