Следующая хранимая процедура устанавливает бит определенного бита в битовый массив флагов. Есть ли способ сделать это без IF
?Установите бит бит с побитовым оператором
ALTER PROCEDURE [dbo].[SETFlag]
@CMCONID int, @FlagID int, @FlagValue bit
AS
BEGIN
SET NOCOUNT ON;
IF @FlagValue = 0
Update CMContracts
SET Conditions = Conditions & ((POWER(2,30)-1)^POWER(2,@FlagID))
Where ID = @CMCONID
ELSE IF @FlagValue = 1
Update CMContracts
SET Conditions = Conditions | POWER(2,@FlagID)
Where ID = @CMCONID
END
Это может быть решенным дизайн по какой-то причине, но, как правило, несмотря на «аккуратности» или «компактности» конструкции битового поля, то лучше, чтобы расширить вне данных и моделировать его реляционно. То есть с текущим дизайном, нет реального способа извлечь выгоду из, например, индексы, если вам нужно * query * в отношении данных этого битового поля. –