CREATE function [dbo].[DelimitedSplit] ( @pString varchar(max), @pDelimiter char(1))returns tableasreturnwitha1 as (select 1 as N union all select 1 union all select 1 union all select 1 union all select 1 union all select 1 union all select 1 union all select 1 union all select 1 union all select 1),a2 as (select 1 as N from a1 as a cross join a1 as b),a3 as (select 1 as N from a2 as a cross join a2 as b),a4 as (select 1 as N from a3 as a cross join a2 as b),Tally as (select top (len(@pString)) row_number() over (order by N) as N from a4),ItemSplit( ItemOrder, Item) as (SELECT N, SUBSTRING(@pDelimiter + @pString + @pDelimiter,N + 1,CHARINDEX(@pDelimiter,@pDelimiter + @pString + @pDelimiter,N + 1) - N - 1)FROM TallyWHERE N < LEN(@pDelimiter + @pString + @pDelimiter) AND SUBSTRING(@pDelimiter + @pString + @pDelimiter,N,1) = @pDelimiter --Notice how we find the delimiter)select row_number() over (order by ItemOrder) as ItemID, Itemfrom ItemSplit
create FUNCTION [dbo].[func_CreateClientTableOrdered]( @item_list as varchar(4000))RETURNS @Items Table(OrderNo int, Item varchar(60))ASBEGIN declare @separator as char(1) ,@position as int ,@item as varchar(60) ,@OrderNo as int set @OrderNo = 0 SET @separator = ',' SET @item_list = @item_list + @separator SELECT @position = patindex('%'+@separator+'%', @item_list) WHILE @position <> 0 BEGIN SELECT @Item = left(@item_list, @position - 1) SELECT @item_list = stuff(@item_list, 1, @position, '') SELECT @position = patindex('%'+ @separator+'%', @item_list) INSERT @Items(OrderNo, Item) SELECT @OrderNo, @Item SELECT @OrderNo = @OrderNo + 1 END RETURNEND