в соответствии с этим вопросом , я не могу присвоить результат логического оператора логики в битовое поле. Моя проблема в том, что я работаю над сценарием создания, и у меня есть несколько зависимых флагов, для выполнения которых требуется логическое выражение. Этот сценарий запустится, когда все пустые значения, и пользователь просто вводит данные, которые он хочет. Сценарий обнаружит, если запись уже существует. Если это так, он обновит только те параметры, которые не являются нулевыми. Если он не существует, скрипт создаст новую запись. Я использую SQL Server 2005.
У меня есть инструкция вставки, использующая ISNULL(@Setting1, 0)
для установки значения по умолчанию, когда переменная не назначена. Моя проблема связана с одним конкретным параметром, который зависит от 2 флагов настроек. Я также хотел бы увидеть решение, которое могло бы поддерживать другой установочный флаг, если бы мне нужно было его добавить.
DECLARE @Setting1 bit
DECLARE @Setting2 bit
DECLARE @Setting3 bit
--... code snipped for setting the value
UPDATE
MyTable
SET
EnableSetting1 = ISNULL(@Setting1, EnableSetting1),
EnableSetting1 = ISNULL(@Setting2, EnableSetting2),
EnableSetting1 = ISNULL(@Setting3, EnableSetting3),
EnableComplexSetting1 = ISNULL(@Setting1, EnableComplexSetting1),
EnableComplexSetting2 = ?
WHERE
Id = @MyId
Логически, ?
будет выглядеть как ISNULL(@Setting2, EnableSetting2) OR ISNULL(@Setting3, EnableSetting3)
, но это, очевидно, неверно. Как мне установить сложную настройку 2? Как бы я это сделал, если бы логически это было ISNULL(@Setting2, EnableSetting2) OR ISNULL(@Setting3, EnableSetting3) OR ISNULL(@Setting4, EnableSetting4)
и т. Д.