Here is my version:
create procedure ListToMultiColumnTable (@List Varchar(max), @ColumnCount int)
as
Begin
declare @tempList Varchar(max), @tempListInner Varchar(max), @listToInsert nvarchar(max)
Declare @ColumnNumber int,@substringCount int
set @templist=replace(@List,',',''',''')+''','''
While @templist<>''''
Begin
Set @ColumnNumber = 1
set @substringCount=0
set @tempListInner=@tempList
set @listToInsert=''
while @ColumnNumber <= @ColumnCount
begin
declare @ci int
set @ci=charindex(',',@tempListInner)
if @listToInsert<>''
set @listToInsert=@listToInsert+', '
set @listToInsert=@listToInsert+substring(@templistInner,1,@ci-1) +
' col'+convert(nvarchar,@columnnumber)
set @substringCount=@substringCount+@ci
set @tempListInner=substring(@tempListInner,
@ci+1,len(@tempListInner))
Set @ColumnNumber = @ColumnNumber + 1
end
if left(@templist,1)<>''''
begin
execute ('select '''+@listToInsert+ ' into ##tab')
Set @ColumnNumber = 1
while @ColumnNumber <= @ColumnCount
begin
execute('alter table ##tab alter column col'+@ColumnNumber+' nvarchar(max)')
Set @ColumnNumber = @ColumnNumber + 1
end
end
else
execute ('insert into ##tab
select '+@listToInsert)
set @templist=substring(@templist,@substringCount+1,len(@templist))
End
select * from ##tab
drop table ##tab
Return
End
go
--output example
declare @List varchar(1000)
set @List = '1,Tea,£1.50,2,Coffee,£1.75,3,Hot Chocolate,£2.05'
exec ListToMultiColumnTable @list,3