DB

[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로 지정하고 있다.


이미지출처 : https://docs.microsoft.com/ko-kr/sql/relational-databases/errors-events/database-engine-events-and-errors?view=sql-server-ver15

 

[해결방법]

처리방법은 동적 쿼리로 변경하면 된다. 하지만 귀찮은 작업이다.

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개월이 넘어가니 슬슬 일이 하기 싫어진다. 

하기 싫다기 보다 귀찮아진다.

 

 

Leave a Reply

error: Content is protected !!