Судя по вашему комментарию, вы должны знать, что «в конечном итоге выясните, окажется ли самое внешнее утверждение истинным или ложным», вам не нужно анализировать выражение, вам нужно его оценить. Вы можете попробовать с sp_executesql:
...
declare @sql nvarchar(max);
declare @result bit;
-- consider @expression has the expression to be evaluated
-- eg. @expression = '(@SOMEVAR=4 OR @SOMEVAR=5) AND (NOT @OTHERVAR=''Y'')';
set @sql = N'set @result=case when ' + @expression + N' then 1 else 0 end;';
exec sp_executesql @sql, N'@SOMEVAR int, @OTHERVAR vachar(max), @result bit output', @SOMEVAR, @OTHERVAR, @result output;
SELECT @result;
...
Хотя это делает то, что вам интересно (оцените выражение), у него есть серьезные проблемы:
- он открыт для SQL-инъекций, @expression должен быть доверенным вводом
- @ выражение может ссылаться только на локальные переменные, которые вы передаете во время sp_executesql
- вам нужно передать все локальную переменную в sp_executesql или, по крайней мере, все локальные переменные, которые могут появиться в @ expression
- сложно поддерживать, поскольку любая новая локальная переменная должна быть передана в sp_executesql (оба объявлены как параметр и фактически добавлены как параметр)
- любая ошибка в @expression будет распространяться как ошибка выполнения (вы можете включить BEGIN TRY / BEGIN CATCH, чтобы предотвратить это)
Я не знаю вашего конкретного контекста, но попробуйте подумать, нужна ли оценка. Я не говорю, что это не так, поскольку мне самому приходилось сталкиваться с подобными проблемами (выражения, исходящие из таблиц конфигурации, которые необходимо было оценить).