create FUNCTION dbo.SplitTableStr
(
@vcList VARCHAR(8000),
@vcDelimiter VARCHAR(2)
)
RETURNS @Arrary TABLE (IndexNo int identity, Value varchar(500), PRIMARY KEY (IndexNo))
BEGIN
DECLARE @iPosStart INT,
@iPosEnd int,
@iLenDelim tinyint,
@iExit tinyint,
@vcStr varchar(1000)
SET @iPosStart = 1
SET @iPosEnd = 1
SET @iLenDelim = LEN(@vcDelimiter)
SET @iExit = 0
IF @vcList IS NOT NULL AND @vcList <> ''
BEGIN
-- 모든 항목을 검색할 때까지 루트 처리
WHILE @iExit = 0
BEGIN
-- 구분문자를 기준으로 다음 항목의 위치 검색
SET @iPosEnd = CHARINDEX(@vcDelimiter, @vcList, @iPosStart)
IF @iPosEnd <= 0
BEGIN
SET @iPosEnd = LEN(@vcList) + 1
SET @iExit = 1
END
-- 아래 @vcStr은 필요한 경우 LTRIM, RTRIM을 적용해야 한다.
SET @vcStr = LTRIM(RTRIM(SUBSTRING(@vcList, @iPosStart, @iPosEnd - @iPosStart)))
-- 테이블 변수에 저장
IF @vcStr <> 'NULL'
INSERT INTO @Arrary (Value) VALUES (@vcStr)
ELSE
INSERT INTO @Arrary (Value) VALUES (NULL)
-- 다음 검색 위치로 이동
SET @iPosStart = @iPosEnd + @iLenDelim
END
END
ELSE
BEGIN
INSERT INTO @Arrary (Value) VALUES (NULL)
END
RETURN
END
[출처] 배열을 테이블(row)로 변환 where in에 사용하기 적합|작성자 우리자나
'데이터베이스 > SQL Server' 카테고리의 다른 글
View안에 StoredProcedure를 쓰는 방법 (0) | 2008.04.29 |
---|---|
SQL 2005 Management Studio 빨리 띄우기 (0) | 2008.04.29 |
퀴즈 문제 (0) | 2008.04.29 |
DateTime ? Char(8) or (10) (0) | 2008.04.29 |
세로 컬럼들을 가로 컬럼으로 모으기.... pivot 쿼리 (0) | 2008.04.29 |