sql server中使用的函数的对象名称错误无效

时间:2015-04-09 06:28:49

标签: sql-server

我正在使用sql-server 2012:

drop table ttt
create table ttt(id int,amt int)
insert into ttt values(1,100),(2,200),(1,200),(3,400),(1,500)

create function dbo.t1(@id int)
returns int
with returns null on null input
as
begin
declare @amt_total int
select @amt_total=sum(amt) from ttt
where id=@id
return @amt_total
end

select t.id,t.amt,f.id from ttt t cross apply dbo.t1(t.id) f

代码在执行时返回以下错误: Msg 208, Level 16, State 3, Line 16 Invalid object name 'dbo.t1'.

任何帮助?

函数,表都存在于同一模式中

2 个答案:

答案 0 :(得分:3)

您使用的语法适用于表值用户定义函数,它返回表数据类型而不仅仅是标量值。

请尝试使用以下语法:

SELECT t.id, t.amt, f.id 
FROM ttt t 
CROSS APPLY (SELECT dbo.t1(t.id) ) f(id)

答案 1 :(得分:2)

它的标量函数。你需要这样称呼它

select t.id,t.amt,dbo.t1(t.id) id from ttt t 

有关SQL Server中函数类型的详细信息,请参阅here