我有一个从三个变量@ 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;
注意: 我在函数内部使用它。
答案 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;
还纠正了一些错误:
declare @val1 varchar=100;
默认大小为1
,@val1
初始化为*
而非100
。有关详细信息,请参阅Why cast/convert from int returns an asterisk。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)='>'