>CREATE FUNCTION [dbo].[fnSplit] >(@list VARCHAR(8000), > @delim CHAR(1) = ',' >) RETURNS TABLE AS >RETURN > WITH csvtbl(START, stop) AS ( > SELECT START = 1, > stop = CHARINDEX(@delim COLLATE Slovenian_BIN2, @list + @delim) > UNION ALL > SELECT START = stop + 1, > stop = CHARINDEX(@delim COLLATE Slovenian_BIN2, > @list + @delim, stop + 1) > FROM csvtbl > WHERE stop > 0 > ) > SELECT row_number() over (order by Start) as ID, LTRIM(RTRIM(SUBSTRING(@list, START, > CASE WHEN stop > 0 THEN stop - START ELSE 0 END))) > AS VALUE > FROM csvtbl > WHERE stop > 0 >>
>>Msg 252, Level 16, State 1, Procedure fnSplit, Line 10 >>Recursive common table expression 'csvtbl' does not contain a top-level UNION ALL operator. >>>>
>>SET ANSI_NULLS ON >>GO >>SET QUOTED_IDENTIFIER ON >>GO >> >>CREATE FUNCTION [dbo].[fnSplit] >>( >> @list varchar(8000), >> @delim CHAR(1) = ',' >>) >>RETURNS Table >>AS >> RETURN >> WITH csvtbl(START, stop) AS >> ( >> SELECT START = 1, >> Stop = CHARINDEX(@delim COLLATE Slovenian_BIN2, >> @list + @delim, stop + 1) >> FROM csvtbl >> WHERE stop > 0 >> ) >> SELECT row_number() over (order by START) AS ID, LTRIM(RTRIM(SUBSTRING(@list, START, >> CASE WHEN stop > 0 THEN stop - START ELSE 0 END))) >> AS VALUE >> FROM csvtbl >> WHERE stop > 0 >>GO >>