我正在尝试执行此标量函数,我尝试了很多方法来实现这一点,但我遇到了问题
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
当我尝试执行它时
选择dbo.CalculateElementFunc()
我收到此错误
Msg 557,Level 16,State 2,Line 1 只能在函数内执行函数和一些扩展存储过程。
请建议
答案 0 :(得分:1)
评论太长了。
在SQL Server中不建议您执行此操作。首先,这真的很难。如您所知,SQL Server函数无法执行动态SQL。
中是微妙的调用扩展存储过程的EXECUTE语句。
exec
和sp_executesql
不是扩展存储过程。
你能做什么?以下是一些选项:
答案 1 :(得分:0)
SQL用户定义函数的限制:
看起来您正在使用/调用用户定义函数中的存储过程。这不是那种困扰你的表达,而是存储过程调用。
尝试用一些逻辑替换它以实现所需的输出。
希望这有帮助。如果它有助于解决您的问题,那么请不要忘记将其标记为答案。