Ne trouve pas la colonne “dbo” ou la fonction définie par l'utilisateur ou un agrégat de “dbo.FN_Split”, ou le nom est ambigu

J'ai suivantes de la fonction qui accepte le format CSV & le délimiteur de & divise

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 --<added a counter

    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 --<increment the counter

       set @String = right(@String,len(@String) - @idx)        
       if len(@String) = 0 break        
   end    
return        
end

& la procédure stockée comme ce qui utilise la fonction ci-dessus & insère le résultat dans la base de données:

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 

Mais Après l'Exécution de la Procédure j'obtiens L'erreur Suivante:
Ne trouve pas la colonne "dbo" ou la fonction définie par l'utilisateur ou un agrégat de "dbo.FN_Split", ou le nom est ambigu.
Pas de lignes affectées.
(0 ligne(s) retourné)

S'il vous plaît aider à s'en sortir...

  • Sélectionnez le résultat de dbo.FN_Split(@p_SourceText, @p_Delimeter) dans une variable de texte et l'utiliser pour votre @sql chaîne de la construction.
  • La fonction de dbo.FN_Split(@p_SourceText, @p_Delimeter) retourne un TABLEAU, pas une seule variable, ainsi que l'utilisation serait SELECT * from dbo.FN_Split(@p_SourceText, @p_Delimeter) et non SELECT dbo.FN_Split(@p_SourceText, @p_Delimeter)
  • Le bug en question le titre est une simple faute de frappe, mais depuis FN_Slit n'apparaissent pas n'importe où ailleurs dans la question, je vais partir du principe que c'est une erreur de transcription, et non le problème.
  • oh non, je n'type d'erreur nom de la fonction est "FN_split" au lieu de "FN_slit"