谁能帮我看一下下面的函数有什麽问题,看了很长时间也没有结果create function view_nianduchaxun(@user nvarchar(20),@nianfen nvarchar(20))
returns table 
as
 begin
  if (@nianfen='全部')
     return(select * from view_nianduxuanze(@user) n left join view_quanbuchaxun v on n.niandu=v.dinggounian where v.tuihuo=0)
  else 
     return(select * from view_nianduxuanze(@user) n left join view_quanbuchaxun v on n.niandu=v.dinggounian where (v.tuihuo=0 and v.dinggouyue=@nianfen)) 
end
go 

解决方案 »

  1.   

    递归?
    用来干啥的,view_nianduxuanze(@user)是什么东东?
      

  2.   

    --try
    create function view_nianduchaxun(@user nvarchar(20),@nianfen nvarchar(20)=null)
    returns table  
    as
      return(select * 
             from view_nianduxuanze(@user) n left join view_quanbuchaxun v 
             on n.niandu=v.dinggounian 
             where (v.tuihuo=0 and v.dinggouyue=isnull(@nianfen,v.dinggouyue)))  
    go  
     
     
      

  3.   

    view_nianduxuanze(@user) 也是一个函数
      

  4.   

    如果我@nianfei='全部'的话,这条sql查询的数据就不对了
      

  5.   

    @nianfei='全部' 的话  直接传NULL值
      

  6.   


    服务器: 消息 170,级别 15,状态 31,过程 view_nianduchaxun,行 10第 10 行: 'BEGIN' 附近有语法错误。
    现在运行sql语句,就报上面的错了。
      

  7.   

    将 returns table
    改为:
    RETURNS @SplitStringsTable TABLE
    (
     QuestionNum int identity(1,1),
     TestID bigint,
     TotalPoint varchar(3)
    )
    就是列出字段 试一试
    我的表值函数都这样写没有错过
      

  8.   


    --加上dbo.函数名
    create function view_nianduchaxun(@user nvarchar(20),@nianfen nvarchar(20))
    returns table  
    as
     begin
      if (@nianfen='全部')
      return(select * from dbo.view_nianduxuanze(@user) n left join view_quanbuchaxun v on n.niandu=v.dinggounian where v.tuihuo=0)
      else  
      return(select * from dbo.view_nianduxuanze(@user) n left join view_quanbuchaxun v on n.niandu=v.dinggounian where (v.tuihuo=0 and v.dinggouyue=@nianfen))  
    end
    go
      

  9.   

    为什么不仔细看呢
    如果要查全部就传NULL啊
    5#已经提示你了