如何执行存储在varchar变量中的数学表达式

时间:2011-09-13 19:44:32

标签: sql sql-server

我的数据库函数中有一个变量:

@LocalVariable = '2*3*100'

我想通过在另一个变量中执行表达式来获得结果。任何人都可以建议如何执行表达式?另外,我想在数据库函数(而不是存储过程)中执行此操作。我期待的结果是600。

4 个答案:

答案 0 :(得分:8)

DECLARE @LocalVariable VARCHAR(32);
SET @LocalVariable = '2*3*100';
EXEC('SELECT ' + @LocalVariable);

将其变为变量:

DECLARE @LocalVariable VARCHAR(32);
SET @LocalVariable = '2*3*100';

DECLARE @out INT, @sql NVARCHAR(4000);
SET @sql = N'SELECT @out = ' + @LocalVariable;

EXEC sp_executesql @sql, N'@out INT OUTPUT', @out OUTPUT;

PRINT @out;

但是你不能在函数中执行此操作,因为你不能在函数中使用EXEC,sp_executesql等,抱歉。

答案 1 :(得分:5)

您可以使用sp_executesql

declare @expression nvarchar(max)
set @expression = '2*3*100'

declare @sql nvarchar(max)
set @sql = 'select @result = ' + @expression

declare @result int
exec sp_executesql @sql, N'@result int output', @result = @result out

select @result

Example at SE Data.

答案 2 :(得分:4)

我有一个更好的解决方案,我虽然与大家分享

DECLARE @x xml
DECLARE @v FLOAT
SET @x = ''
SET @v = @x.value('(1 + 4) div 3', 'FLOAT')
SELECT @v

这也可以起作用。

答案 3 :(得分:3)

DECLARE @LocalVariable NVARCHAR(100)
SET @LocalVariable = '2*3*100'
EXEC ('SELECT ' + @LocalVariable)