找不到列“dbo”或用户定义的函数或聚合“dbo.Splitfn”,或名称不明确

海家伙,

我已经使用了以下拆分function,

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 

我在查询中使用了这个函数并执行了它

 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 

但是当我执行我的存储过程给值(1,2)我得到了错误

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

我已经检查了我的tablevalued函数的function'splitfn'在那里,但我不知道是怎么回事? 有什么build议么..

这是一个表值函数,但是您将它用作标量函数。

尝试:

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

但是…也考虑将你的函数改成内联TVF,因为它会performance得更好。

你需要把一个表格udf像表格一样对待,比如join它

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

一个普遍的答案

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

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

由于人们将来自Google,请确保您位于正确的数据库中。

在“master”数据库中运行SQL通常会返回这个错误。