执行数学表达式并将值设置为SQL中的变量

时间:2015-05-14 09:14:05

标签: sql sql-server-2008

我有一个从三个变量@ val1,@ val2和@Operator创建的数学表达式表达式。所以我需要按字符串执行查询,我需要在查询字符串中设置变量的值,我该如何设置?

我在下面试过

declare @val1 varchar=100;
declare @val2 varchar=300;
declare @Oper varchar(20)='>';

declare @query varchar(max);

declare @Flag int=0;

set @query='if(convert(int,'+@val1+')'+@Oper+'convert(int,'+@val2+') set @Flag=1';


exec (@query);
print @Flag;

注意:   我在函数内部使用它。

2 个答案:

答案 0 :(得分:3)

将参数化查询与sp_executesql过程一起使用:

DECLARE @val1 VARCHAR(20)= '500';
DECLARE @val2 VARCHAR(20)= '300';
DECLARE @Oper VARCHAR(20)= '>';

DECLARE @query NVARCHAR(MAX);

DECLARE @Flag INT= 0;

SET @query = 'if ' + @val1 + @Oper + @val2 + ' set @Flag=1';

DECLARE @ParamDefs NVARCHAR(MAX) = N'@Flag int output'

EXEC sp_executesql @query, @ParamDefs, @Flag OUTPUT

PRINT @Flag;

还纠正了一些错误:

  1. declare @val1 varchar=100;默认大小为1@val1初始化为*而非100。有关详细信息,请参阅Why cast/convert from int returns an asterisk
  2. 您无需在动态查询中转换为int

答案 1 :(得分:0)

只需更改

即可
declare @val1 varchar=100; 
declare @val2 varchar=300; 
declare @Oper varchar(20)='>';

declare @val1 varchar(100)
declare @val2 varchar(300)
declare @Oper varchar(20)='>'