如何在sql server 2008中调用标量函数

Hap*_*ppy 48 sql sql-server

我创建了一个标量函数,它已成功创建,但是当我使用select语句调用该函数时,它会显示无效的对象名称'dbo.fun_functional_score'.

我的功能:

 ALTER function [dbo].[fun_functional_score] (@phy_id varchar(20))
 returns  varchar(50)

as
begin 

declare @level_initial int, @level_current int

-- initial functional score
set @level_initial=(SELECT pflag.fun_level
FROM tbl_phy_demographic_details as [phy] 
    inner join tbl_all_purple_flag_level as [pflag] on phy.Demographic_id=pflag.Id 
WHERE phy.Physicion_id=@phy_id
    and pflag.visited_count=(select MAX(visited_count)-1 from tbl_all_purple_flag_level ))


-- current functional score
set @level_current=(SELECT pflag.fun_level
FROM tbl_phy_demographic_details as [phy] 
    inner join tbl_all_purple_flag_level as [pflag] on phy.Demographic_id=pflag.Id 
WHERE phy.Physicion_id=@phy_id
    and pflag.visited_count=(select MAX(visited_count) from tbl_all_purple_flag_level ))


--to calculate functional score
declare @fun_level varchar(20),@result varchar(50)

set  @fun_level=@level_current-@level_initial;

 if @fun_level = 0   set @result='Maintained' 
if @fun_level = '-1'  set @result='Minor Improvement' 
if @fun_level = '-2'  set @result='Moderate Improvement' 
if @fun_level = '-3'  set @result='Significant Improvement' 
if @fun_level =  '-4'  set @result='Substantial Improvement' 
if @fun_level =  '1'  set @result='Minor Reduction' 
if @fun_level =  '2'  set @result='Moderate Reduction' 
if @fun_level =  '3'  set @result='Significant Reduction' 
if @fun_level =  '4'  set @result='Substantial Reduction' 




return @result

end
Run Code Online (Sandbox Code Playgroud)

我用这个选择来打电话

 select * from dbo.fun_functional_score('01091400003') as [er]
Run Code Online (Sandbox Code Playgroud)

要么

 select * from dbo.fun_functional_score('01091400003') 
Run Code Online (Sandbox Code Playgroud)

两者都显示错误"无效的对象名称'dbo.fun_functional_score'."

在哪里我犯了错误.谁能帮我...

Mud*_*san 89

您的语法是表值函数,它返回结果集并且可以像表一样查询.对于标量函数呢

 select  dbo.fun_functional_score('01091400003') as [er]
Run Code Online (Sandbox Code Playgroud)

  • 必须指定所示的架构,而不仅仅是函数名称。由于这个原因我不得不重试几次。希望它能帮助某人。 (4认同)

Mik*_*son 20

你有一个标量值函数而不是表值函数.from子句用于表.只需在列列表中直接查询该值即可.

select dbo.fun_functional_score('01091400003')
Run Code Online (Sandbox Code Playgroud)


小智 7

出于某种原因,我在使用括号引用它之前无法使用我的标量函数,如下所示:

select [dbo].[fun_functional_score]('01091400003')
Run Code Online (Sandbox Code Playgroud)