예전에는 조건에 따른 Like검색시, 동적쿼리를 많이 썼던것 같습니다.

그러나, 동적쿼리는 유연한 대신 때에 따라 SP가 컴파일 되지 않는다는 단점을 가지고 있죠...

정적 쿼리로 작성하면서, 조건에 따른 LIKE검색을 하는 방법은 다음과 같이 처리할 수 있습니다.

정적 쿼리로도,  쿼리를 구분하여 Like를 태우거나, 제외할 수 도 있지만, 다음 예는 좀더 유연하게 처리가 가능하도록

했습니다. 더 나은 아이디어 있으면 댓글로 공유부탁드립니다.


DECLARE @Search_Keyword VARCHAR(255)
SET @Search_Keyword = '테스트'

DECLARE @Search_Type VARCHAR(2)
SET @Search_Type = '02'

;
WITH TestCTE
AS
(
	SELECT COUNT(*) OVER() AS TotalCount	
		 , ROW_NUMBER() OVER(
				ORDER BY (
					CASE @Sort_Order
					WHEN '1' THEN A.View_Cnt
					WHEN '2' THEN A.Price
					WHEN '3' THEN A.Reg_Dt
					ELSE A.View_Cnt
					END
				) DESC
				, 
				(
					CASE @Sort_Order
					WHEN '3' THEN A.Reg_Tm
					ELSE A.Vod_No
					END
				) DESC
		 ) AS RowNum   
		 , A.Title
		 , A.Cont
		 , A.View_Cnt
		 , A.Reg_Dt
	  FROM {DB명}.dbo.{테이블명} AS A
	 WHERE 1=1	   
	   AND 1= ( CASE
					WHEN @Search_Keyword = '' THEN 1					
					WHEN 
						(
							CASE 
								WHEN @Search_Type = '01' THEN A.Title
								WHEN @Search_Type = '02' THEN A.Cont
								ELSE A.Title								
							END Like '%' +@Search_Keyword+ '%'
							
							OR
							
							CASE 
								WHEN @Search_Type = '' AND @Search_Keyword <> ''  THEN A.Cont
								ELSE A.Reg_Dt --Dummy용
								
							END Like '%' +@Search_Keyword+ '%'
						
						) THEN 1
				 END						
		)
)

SELECT *
  FROM TestCTE A		  
 WHERE RowNum BETWEEN (@PageNum-1)*@PageSize+1 AND @PageNum*@PageSize
 ORDER BY RowNum ASC