MS sql 2008 r2 - 计算变量中的表达式

时间:2014-01-28 09:22:00

标签: sql-server sql-server-2008 expression

我正在使用Ms sql server 2008,我在nvarchar变量中存储了经验。我想把它们当作一个正常的表达方式。

以下是管理工作室的例子:

DECLARE @exp nvarchar (50)
SET @exp ='(1&1)|1'
PRINT (1&0)|1
PRINT @exp

最后一行的预期结果是1.

我在technet网站上找到了这个链接。 (EvaluateAsExpression

它使用了一些C#代码,我不知道如何在管理工作室中实现。 或者你有其他解决方案吗?

谢谢,Tamas!

2 个答案:

答案 0 :(得分:1)

EXEC可以评估表达式,请参阅SqlFiddle

DECLARE @exp nvarchar (50)
SET @exp = N'1+2+3+4+5';
exec (N'SELECT ' + @exp); 

我会建议不要这样做。如果要使用安全表达式求值程序,请在CLR中构建一个并将其集成为SQLCLR函数,请参阅How to: Create and Run a CLR SQL Server User-Defined Function

在变量中捕获值:

DECLARE @exp nvarchar (50)
SET @exp = N'1+2+3+4+5';

declare @result int;
declare @sql nvarchar(max) = N'set @result = (' + @exp + ');';
exec sp_executesql @sql, N'@result int output', @result output;

select @result;

每当执行动态SQL时,通常必须谨慎,这是一个可能的SQL注入攻击向量,因此必须绝对信任输入。 C#中自定义构建的解析器更好/更安全的另一个原因。

答案 1 :(得分:0)

您可以尝试创建动态查询并执行它:

DECLARE @exp nvarchar (50)

SET @exp ='(1&1)|1'
PRINT (1&0)|1

SET @exp = 'PRINT ' + @exp
EXEC sp_executesql @exp

这实际上会创建一个包含@exp变量内容的新PRINT语句并执行它。