외부에서 다수의 검색어를 입력받아 특정컬럼에서 검색을 하려고 합니다.

 

검색어는 특정 문자로 SPLIT해서 테이블로 받아오도록 함수를 만들었습니다.

SELECT DATA FROM dbo.UDF_SPLIT('검색어1,검색어2,검색어3', ',')

--출력--

검색어1

검색어2

검색어3

 

SELECT * FROM dbo.T_BBS_DATA

WHERE BBS_TITLE LIKE '%' + (SELECT DATA FROM dbo.UDF_SPLIT('검색어1,검색어2,검색어3', ',')) + '%'

위의 형태로 검색을 해서 결과를 얻으려 하면 아래처럼 에러가 나게옵니다.

 

메시지 512, 수준 16, 상태 1, 줄 1
하위 쿼리에서 값을 둘 이상 반환했습니다. 하위 쿼리 앞에 =, !=, <, <=, >, >= 등이 오거나 하위 쿼리가 하나의 식으로 사용된 경우에는 여러 값을 반환할 수 없습니다.

고수님들 좋은 방법이 있으시면  조언부탁드립니다.

 감사합니다~

 

 

------------------------------------------------------------

-- SPLIT 해서 TABLE 로 넘겨받는 함수

------------------------------------------------------------

CREATE FUNCTION [dbo].[UDF_SPLIT]
(
 @PARAM VARCHAR(MAX),
 @DIV VARCHAR(1) 
)
RETURNS @RESULT TABLE
(
 DATA NVARCHAR(50)
)
AS
BEGIN
 DECLARE @INDEX INT
 DECLARE @POS INT
 DECLARE @TMP NVARCHAR(50)

 SET @INDEX = 1
 SET @POS = 1

 WHILE @POS > 0
 BEGIN
  SET @POS = CHARINDEX(@DIV, @PARAM, @INDEX)

  IF @POS = 0
   BEGIN
    SET @TMP = RIGHT(@PARAM, LEN(@PARAM) - @INDEX + 1)
   END
  ELSE
   BEGIN
    SET @TMP = SUBSTRING(@PARAM, @INDEX, @POS - @INDEX)
   END

  IF LEN(@TMP) > 0
   BEGIN
    SET @TMP = RTRIM(LTRIM(@TMP))
    INSERT INTO @RESULT VALUES (@TMP)
   END

  SET @INDEX = @POS + 1
 END
RETURN
END