标量UDF
create function getavgcust(@customerid int )
returns money
as 
begin
declare @amount money
set @amount=0
select @amount=avg(totaldue)
from sales.salesorderheader
where (customerid=@customerid)
return isnull(@amount,0)
end 
调用该函数
print dbo.getavgcust(23)
错误提示:消息 208,级别 16,状态 1,第 2 行
对象名  'sales.salesorderheader' 无效。请问这样写有什么问题吗?

解决方案 »

  1.   


    user AdventureWorks
    gocreate function getavgcust(@customerid int )
    returns money
    as  
    begin
    declare @amount money
    select @amount=avg(totaldue)
    from sales.salesorderheader
    where (customerid=@customerid)
    return isnull(@amount,0)
    end  select  dbo.getavgcust(23)
    ---------------------
    15553.0575(1 行受影响)
      

  2.   

    你应该不是在AdventureWorks数据库下面执行的
      

  3.   

    --'sales.salesorderheader'中的sales 是什么?架构名?,数据库名?
    --如果是数据库名,应该是sales.dbo.salesorderheader
      

  4.   


    挑个小毛病
    use AdventureWorks
    go
    create function getavgcust(@customerid int )
    returns money
    as  
    begin
    declare @amount money
    set @amount=0
    select @amount=avg(totaldue)
    from sales.salesorderheader
    where (customerid=@customerid)
    return isnull(@amount,0)
    end  print dbo.getavgcust(23)
      

  5.   

    use AdventureWorks
    go
    create function getavgcust(@customerid int )
    returns money
    as  
    begin
      

  6.   

    是用的SQL 自带的示例数据库,有问题吗?
      

  7.   

    我直接调用数据库自带的函数,也有类似的提示:
    use adventureworks
    go
    print dbo.ufngetstock(2)提示:消息 208,级别 16,状态 1,第 1 行
    对象名  'dbo.ufngetstock' 无效。
    有人知道到底是我哪儿弄的不对吗》?