找不到列“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通常会返回这个错误。