Раствор с помощью sp_executesql
, как описано в других ответах будет работать нормально, но если вы собираетесь выполнения содержимого таблицы как часть динамического оператора, то вам нужно быть очень осторожными, о том, что можно сохранить в этом поле. Цели, которые вы сохраняете, всегда состоят из одного оператора и целевого значения? Если это так, было бы сложно сохранить эти два отдельно и обработать их статическим запросом. Что-то вроде:
declare @SampleData table
(
[ActualValue] decimal(11, 2),
[Operator] varchar(2),
[ReferenceValue] decimal(11, 2)
);
insert @SampleData values
(100, '>=', 98.25),
(100, '<=', 98.25),
(100, 'G', 98.25);
select
[ActualValue],
[Operator],
[ReferenceValue],
[GoalMet] = case [Operator]
when '>=' then case when [ActualValue] >= [ReferenceValue] then 1 else 0 end
when '<=' then case when [ActualValue] <= [ReferenceValue] then 1 else 0 end
/*...other operators here if needed...*/
else null
end
from
@SampleData;
Это немного более подробный, но, возможно, еще более безопасный. Возможно, это полезно для вашего общего дела, и, возможно, это не так; Я просто подумал, что выброшу его в качестве альтернативы.
посмотрите EXEC sp_executesql @sql – Mark
Что вы написали [динамический SQL] (https://msdn.microsoft.com/en-us/library/ms188001.aspx). В статье MSFT показано, как выполнить такой оператор. – xQbert