I have the following function that takes a CSV and a divider and splits it
ALTER FUNCTION [dbo].[FN_Split] (@String varchar(max), @Delimiter char(1))
returns @temptable TABLE (orderId int,items varchar(max))
as
begin
declare @idx int
declare @i int=0
declare @slice varchar(8000)
declare @orderId int = 0
select @idx = 1
if len(@String)<1 or @String is null return
while @idx!= 0
begin
set @idx = charindex(@Delimiter,@String)
if @idx!=0
set @slice = left(@String,@idx - 1)
else
set @slice = @String
if(len(@slice)>0)
insert into @temptable(orderId, Items) values(@orderId, @slice)
set @orderId = @orderId+1
set @String = right(@String,len(@String) - @idx)
if len(@String) = 0 break
end
return
end
& a stored procedure like this one that uses the above function and inserts the result into the database:
ALTER PROCEDURE dbo.StoredProcedure3
(
--@tableName nvarchar(max),
@p_SourceText nvarchar(max),
@p_Delimeter nvarchar(100)=','
)
AS
BEGIN
DECLARE @sql nvarchar(max)
--select * from fn_ParseText2Table(@p_SourceText, @p_Delimeter)
--insert into Person values (@sql)
declare @i int=0
DECLARE @max int=3
while @i<=@max
begin
if @i=0
begin
set @sql='insert into Person values( select items from'+dbo.FN_Split(@p_SourceText,
@p_Delimeter)+ 'as where orderId ='+0+')'
end
else
begin
if @i=(@max-1)
begin
set @sql=@sql+'UNION select items from'+ dbo.FN_Split(@p_SourceText,
@p_Delimeter)+' where orderId ='+@i+')'
end
else
begin
set @sql=@sql+'UNION select items from'+ dbo.FN_Split(@p_SourceText,
@p_Delimeter)+ 'where orderId ='+@i+') UNION'
end
end
set @i=@i+1
end
END
But after the procedure, I get the following error: It is impossible to find either the "dbo" column, the user-defined function, the set "dbo.FN_Split", or the name is ambiguous. No lines are affected. (0 rows returned)
Please help get out of it ...
source
share