我正在使用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!
答案 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语句并执行它。