如何评估SQL Server存储过程中的布尔表达式字符串?

时间:2018-03-13 00:23:49

标签: sql sql-server stored-procedures boolean-logic

我有一个包含以下值的字符串:

COND_STRING = '(TRUE AND FALSE AND TRUE) OR FALSE'

如果在SQL Server存储过程中为True或False(1或0),如何评估结果?

2 个答案:

答案 0 :(得分:2)

我只能想到这种方式。使用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)

答案 1 :(得分:1)

嗯。嗯。 。 。考虑到SQL Server不支持布尔值,这很棘手。你可以这样做:

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;