使用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中进行计算或使用业务规则。