Microsoft SQL Server 2008에서 테이블 값 함수를 작성하여 데이터베이스에서 쉼표로 구분 된 열을 사용하여 각 값에 대해 별도의 행을 뱉었습니다.
예 : "one, two, three, four"는 다음 값을 포함하는 열이 하나만있는 새 테이블을 반환합니다.
one
two
three
four
이 코드는 오류가 발생하기 쉽습니까? 내가 테스트 할 때
SELECT * FROM utvf_Split('one,two,three,four',',')
그것은 영원히 실행되며 아무것도 반환하지 않습니다. MSSQL 서버 (WHY WHY WHY ?!)에 내장 된 분할 기능이 없으며 웹에서 찾은 모든 유사한 기능이 절대적으로 쓰레기이거나 단순히 내가하려고하는 것과 관련이 없기 때문에 이것은 특히 마음이 아프게됩니다. .
기능은 다음과 같습니다.
USE *myDBname*
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER FUNCTION [dbo].[utvf_SPlit] (@String VARCHAR(MAX), @delimiter CHAR)
RETURNS @SplitValues TABLE
(
Asset_ID VARCHAR(MAX) NOT NULL
)
AS
BEGIN
DECLARE @FoundIndex INT
DECLARE @ReturnValue VARCHAR(MAX)
SET @FoundIndex = CHARINDEX(@delimiter, @String)
WHILE (@FoundIndex <> 0)
BEGIN
DECLARE @NextFoundIndex INT
SET @NextFoundIndex = CHARINDEX(@delimiter, @String, @FoundIndex+1)
SET @ReturnValue = SUBSTRING(@String, @FoundIndex,@NextFoundIndex-@FoundIndex)
SET @FoundIndex = CHARINDEX(@delimiter, @String)
INSERT @SplitValues (Asset_ID) VALUES (@ReturnValue)
END
RETURN
END