如何计算 SQL 服务器存储过程中的布尔表达式字符串?
How can I evaluate a boolean expression string in a SQL Server stored procedure?
我有一个具有以下值的字符串:
COND_STRING = '(TRUE AND FALSE AND TRUE) OR FALSE'
如果 SQL 服务器存储过程中的结果为 True 或 False(1 或 0),我如何评估结果?
我只能这样想了。使用 Dynamic SQL
declare @str varchar(100) = '(TRUE AND FALSE AND TRUE) OR FALSE'
select @str = replace(replace(replace(replace(@str, 'TRUE', '1'), 'FALSE', 0), 'AND', '&'), 'OR', '|')
select @str = 'SELECT' + @str
print @str
exec (@str)
嗯。 . .这很棘手,因为 SQL 服务器不支持布尔值。你可以这样做:
declare @new_cond = replace(replace(@cond_string, 'TRUE', '(1=1)'), 'FALSE', '(1=0)');
declare @sql = 'select @result = (case when @cond then 1 else 0 end)';
set @sql = replace(@sql, '@cond', @new_cond);
declare @result int;
exec sp_executesql @sql, N'@result int output', @result=@result output;
我有一个具有以下值的字符串:
COND_STRING = '(TRUE AND FALSE AND TRUE) OR FALSE'
如果 SQL 服务器存储过程中的结果为 True 或 False(1 或 0),我如何评估结果?
我只能这样想了。使用 Dynamic SQL
declare @str varchar(100) = '(TRUE AND FALSE AND TRUE) OR FALSE'
select @str = replace(replace(replace(replace(@str, 'TRUE', '1'), 'FALSE', 0), 'AND', '&'), 'OR', '|')
select @str = 'SELECT' + @str
print @str
exec (@str)
嗯。 . .这很棘手,因为 SQL 服务器不支持布尔值。你可以这样做:
declare @new_cond = replace(replace(@cond_string, 'TRUE', '(1=1)'), 'FALSE', '(1=0)');
declare @sql = 'select @result = (case when @cond then 1 else 0 end)';
set @sql = replace(@sql, '@cond', @new_cond);
declare @result int;
exec sp_executesql @sql, N'@result int output', @result=@result output;