【问题标题】:how to call scalar function in sql server 2008如何在 sql server 2008 中调用标量函数
【发布时间】:2021-10-08 02:05:43
【问题描述】:

我创建了一个标量函数,它创建成功,但是当我使用 select 语句调用该函数时,它显示 Invalid object name '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

我用这个选择来调用

 select * from dbo.fun_functional_score('01091400003') as [er]

 select * from dbo.fun_functional_score('01091400003') 

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

我犯错的地方。谁能帮帮我...

【问题讨论】:

    标签: sql sql-server


    【解决方案1】:

    您的语法适用于返回结果集并且可以像表一样查询的表值函数。对于标量函数做

     select  dbo.fun_functional_score('01091400003') as [er]
    

    【讨论】:

    • 必须指定如图所示的架构,而不仅仅是函数名。由于这个原因,我不得不重试几次。希望它可以帮助某人。
    【解决方案2】:

    您有一个标量值函数,而不是表值函数。 from 子句用于表。直接在列列表中查询值即可。

    select dbo.fun_functional_score('01091400003')
    

    【讨论】:

      【解决方案3】:

      由于某种原因,我无法使用我的标量函数,直到我使用括号引用它,如下所示:

      select [dbo].[fun_functional_score]('01091400003')
      

      【讨论】:

      【解决方案4】:

      对于标量函数语法是

      Select dbo.Function_Name(parameter_name)
      
      Select dbo.Department_Employee_Count('HR')
      

      【讨论】:

        【解决方案5】:

        你可以像这样调用你的标量函数

        declare @value <type>;
         exec @value= <dbo.fn_nameOfFunction>  <param1>, <param2>;
         print @value;
        

        【讨论】:

          猜你喜欢
          • 2012-01-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-01-08
          • 2015-02-26
          • 1970-01-01
          • 1970-01-01
          • 2010-12-30
          相关资源
          最近更新 更多