Question comment appeler la fonction scalaire dans le serveur SQL 2008


J'ai créé une fonction scalaire, elle a été créée avec succès, mais lorsque j'appelle la fonction à l'aide de l'instruction select, elle indique Invalid object name 'dbo.fun_functional_score'.

ma fonction:

 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

j'ai utilisé cette sélection pour appeler

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

ou

 select * from dbo.fun_functional_score('01091400003') 

les deux affichent une erreur "Nom d'objet invalide 'dbo.fun_functional_score'. "

où j'ai fait erreur. Quelqu'un peut-il m'aider...


39
2018-01-10 10:06


origine


Réponses:


Votre syntaxe est pour la fonction de valeur de table qui renvoie un jeu de résultats et peut être interrogée comme une table. Pour la fonction scalaire

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

74
2018-01-10 10:09



Vous avez une fonction de valeur scalaire par opposition à une fonction de table. La clause from est utilisée pour les tables. Il suffit d'interroger la valeur directement dans la liste des colonnes.

select dbo.fun_functional_score('01091400003')

16
2018-01-10 10:09



Pour une raison quelconque, je n'ai pas pu utiliser ma fonction scalaire tant que je ne l'ai pas référencée par des parenthèses, comme ceci:

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

5
2018-03-27 15:54



Pour Fonction scalaire La syntaxe est

Select dbo.Function_Name(parameter_name)

Select dbo.Department_Employee_Count('HR')

1
2018-02-09 04:55