[MSSQL / SQLSERVER] 문자열 Parameter를 Table로 반환하는 함수




MSSQL은 배열 타입의 Parameter를 제공하지 않는다고 합니다.


따라서 문자열 타입 (예: "apple, banana, ...")을 입력받으면

아래와 같이, 테이블 형태로 반환하는 함수를 사용합니다.







* Query 

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE FUNCTION [dbo].[UF_SPLIT]
(
 @VCSTRING NVARCHAR(MAX),
 @VCSEPARATOR NVARCHAR(100)
)
RETURNS @RET_TABLE TABLE
(
 VCDATA NVARCHAR(1000)
)
AS
BEGIN

 IF @VCSTRING IS NULL OR @VCSEPARATOR  IS NULL
  RETURN;

 DECLARE @ISTRINGLEN INT, @ISEPLEN INT, @IDX INT, @ISTART INT, @ILEN INT
 DECLARE @VCDATA NVARCHAR(1000)

 SET @ISTART = 1
 SET @ISTRINGLEN = LEN(@VCSTRING)
 SET @ISEPLEN = LEN(@VCSEPARATOR)

 IF(@ISTRINGLEN = 0)
  RETURN;

 IF(@ISEPLEN = 0)
 BEGIN
  INSERT INTO @RET_TABLE VALUES(@VCSTRING)
  RETURN;
 END

 SET @IDX = CHARINDEX(@VCSEPARATOR, @VCSTRING, 0)
 WHILE (@IDX > 0)
 BEGIN
  SET @VCDATA = SUBSTRING(@VCSTRING, @ISTART, @IDX - @ISTART)
  INSERT INTO @RET_TABLE VALUES(@VCDATA)

  SET @ISTART = @IDX + @ISEPLEN
  SET @IDX = CHARINDEX(@VCSEPARATOR, @VCSTRING, @ISTART)
 END

 SET @VCDATA = SUBSTRING(@VCSTRING, @ISTART, @ISTRINGLEN - @ISTART+1)
 INSERT INTO @RET_TABLE VALUES(@VCDATA)

 RETURN;

END

  • @VCSTRING : 입력 받은 문자열
  • @VSSEPARATOR : SPLIT할 구분자
  • @RET_TABLE : 반환 테이블


* 사용 예시

다음과 같이 SELECT문을 통해 테스트 해볼 수 있습니다.


select * from [테이블명].dbo.UF_SPLIT('apple, banana, ...', ',') 



더 좋은 방법을 알고 계신분은 댓글로 알려주시면 감사하겠습니다.

0 댓글