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 댓글