je suis en train d'exécuter cette fonction scalaire et j'ai essayé beaucoup d'approches pour y parvenir, mais je suis bloquécomment évaluer une expression arithmétique dans une fonction scalaire SQL
Create FUNCTION CalculateElementFunc()
RETURNS int
AS
BEGIN
DECLARE @ResultVar numeric(18,6)
DECLARE @eq nvarchar(MAX)
set @eq = '7.5/100*1258.236'
declare @expression nvarchar(max)
set @expression = @eq
declare @result int
declare @SQLString nvarchar(max)
Set @SQLString = N'Select @result = @expression'
exec sp_executesql @SQLString, N'@expression nvarchar(100)',
@expression,
@result = @result output
select @ResultVar = @result
if(@ResultVar <> ROUND(@ResultVar, 2 ,1))
set @ResultVar = cast(ROUND(@ResultVar, 2 ,1) + .01 as numeric(18,2))
RETURN @ResultVar
END
Lorsque je tente de l'exécuter
select dbo.CalculateElementFunc()
i obtenir cette erreur
Msg 557, Niveau 16, État 2, ligne 1 Seules les fonctions et ainsi Les procédures stockées étendues peuvent être exécutées depuis une fonction.
S'il vous plaît Advice
Les fonctions dans T-SQL ne peuvent pas avoir d'effets secondaires. Par conséquent, vous ne pouvez pas insérer/mettre à jour ou appeler des procédures stockées. À moins que vous n'impliquiez vous-même l'analyseur d'expression (ce qui n'est certainement pas trivial), je ne pense pas que cela soit possible en TSQL pur. D'ailleurs, la performance serait horrible. Vous pourriez peut-être utiliser une fonction CLR pour le faire. –
alors .. quelle est l'alternative pour évaluer une expression arithmétique dans une fonction scalaire SQL – Mariam
Comme je l'ai dit (et d'autres ont également souligné) si l'expression est inconnue au moment du design, et vous avez besoin d'une fonction (pas une procédure stockée), votre seule option est les fonctions CLR (ou mieux encore: ne pas le faire en SQL) –