Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用SQL中的函数计算数学_Sql_Sql Server_Tsql - Fatal编程技术网

使用SQL中的函数计算数学

使用SQL中的函数计算数学,sql,sql-server,tsql,Sql,Sql Server,Tsql,我尝试了两种方法,但这两种方法在用户定义的函数中都不起作用。这是我的第一个解决方案 -- SELECT dbo.ufn_CalculateMath('(9 + 4 + 2) / 3') ALTER FUNCTION ufn_CalculateMath ( @mathExpr NVARCHAR(MAX) ) RETURNS DECIMAL(18, 4) BEGIN DECLARE @retVal DECIMAL(18, 4)

我尝试了两种方法,但这两种方法在用户定义的函数中都不起作用。这是我的第一个解决方案

-- SELECT dbo.ufn_CalculateMath('(9 + 4 + 2) / 3')
ALTER FUNCTION ufn_CalculateMath
    (
      @mathExpr NVARCHAR(MAX)
    )
RETURNS DECIMAL(18, 4)
    BEGIN
        DECLARE @retVal DECIMAL(18, 4)       

        DECLARE @arithExpr NVARCHAR(MAX) = @mathExpr
        DECLARE @arithFor NVARCHAR(MAX) = N'SELECT @tempResult = '
            + @arithExpr

        EXECUTE sp_executesql @arithFor, N'@tempResult varchar(30) OUTPUT',
            @tempResult = @retVal OUTPUT

        RETURN  @retVal
    END
这是我的第二次

-- SELECT  dbo.ufn_CalculateMath2('(9 + 4 + 2) / 3') 
ALTER FUNCTION ufn_CalculateMath2
    (
      @mathExpr NVARCHAR(MAX)
    )
RETURNS DECIMAL(18, 4)
    BEGIN
        DECLARE @arithTemp NVARCHAR(MAX) = @mathExpr
        DECLARE @sql1 VARCHAR(MAX) = 'SELECT ' + @arithTemp
        DECLARE @TABLE TABLE ( result DECIMAL(18, 4) )

        INSERT  INTO @TABLE
                EXECUTE ( @sql1
                       )

        DECLARE @x DECIMAL(18, 4)

        SELECT  @x = result
        FROM    @TABLE

        RETURN  @x
    END
第二个解决方案无法编译,因为不允许在UFN中添加INSERT语句

第一个解决方案将编译,但运行时出现错误

还有别的办法吗

任何帮助都将不胜感激


谢谢

如果您的SQL Server版本足够高(SQL Server 2005或更高版本),您可以在一个较短的时间内进行评估。这通常需要Visual Studio编译CLR函数。

错误到底是什么?问题可能是函数内部无法调用函数。这里有一个人有着完全相同的问题:它似乎无法在SQL Server中完成。您无法从函数中执行存储过程(
sp_executesql
)或执行任何DML操作(
INSERT
)。开箱即用的问题:为什么您首先要在SQL中进行数学运算。我总是尽量避免在SQL中进行计算或使用业务规则。