2010-01-19 22 views
39

chicos Hai,no puede encontrar cualquiera de las columnas "dbo" o la función definida por el usuario o agregado "dbo.Splitfn", o el nombre es ambiguo

Yo he utilizado la siguiente función de división,

CREATE FUNCTION dbo.Splitfn(@String varchar(8000), @Delimiter char(1))  
returns @temptable TABLE (items varchar(8000))  
as  
begin  
declare @idx int  
declare @slice varchar(8000)  

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(Items) values(@slice)  

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

end 

y he usado esta función en una consulta y se ejecutó

ALTER PROCEDURE [dbo].[Employees_Delete] 
-- Add the parameters for the stored procedure here 
@Id varchar(50) 
AS 
BEGIN 
-- SET NOCOUNT ON added to prevent extra result sets from 
-- interfering with SELECT statements. 
SET NOCOUNT ON; 

-- Insert statements for procedure here 

if exists(select Emp_Id from Employee where Emp_Id=dbo.Splitfn(@Id,',')) 
begin 
    update Employee set Is_Deleted=1 where Emp_Id=dbo.Splitfn(@Id,',') 
    select 'deleted' as message 
end 
END 

pero cuando excute mi proceso de almacenamiento dando dicen los valores (1,2) tengo el error

Cannot find either column "dbo" or the user-defined 
function or aggregate "dbo.Splitfn", or the name is ambiguous. 

He comprobado mis funciones de valores de tabla la función 'splitfn' estaba allí, pero no sé lo que está pasando mal? Cualquier sugerencia ...

Respuesta

64

Es una función de valor de tabla, pero la está utilizando como función escalar.

Probar:

where Emp_Id IN (SELECT i.items FROM dbo.Splitfn(@Id,',') AS i) 

... Pero también tienen en cuenta el cambio de su función en una TVF en línea, ya que va a funcionar mejor.

+0

@Rob funcionó para mí .. Cómo cambiarlo a un TVF en línea .. Guía de Plz –

+0

Hay muchos ejemplos a su alrededor. Aquí hay uno: http://sqlserverpedia.com/blog/sql-server-bloggers/splitting-a-delimited-string-part-1/ –

+0

Gracias por la respuesta. Estaba teniendo el mismo problema y no podía entender por mi vida lo que estaba pasando. Me salvaste un gran dolor de cabeza. – gsirianni

10

que necesita para tratar una UDF con valores de tabla como una tabla, por ejemplo, unirse a ella

select Emp_Id 
from Employee E JOIN dbo.Splitfn(@Id,',') CSV ON E.Emp_Id = CSV.items 
3

una respuesta general

select * from [dbo].[SplitString]('1,2',',') -- Will work 

pero

select [dbo].[SplitString]('1,2',',') -- will not work and throws this error 
0

Puesto que la gente va a venir a partir Google, asegúrate de estar en la base de datos correcta.

Ejecutar SQL en la base de datos 'maestra' a menudo devolverá este error.

Cuestiones relacionadas