Логическое " не "в T-SQL не работает с типом данных "бит"?
пытаясь выполнить одну логическую операцию NOT, кажется, что в MS SQL Server 2005 следующий блок не работает
DECLARE @MyBoolean bit;
SET @MyBoolean = 0;
SET @MyBoolean = NOT @MyBoolean;
SELECT @MyBoolean;
вместо этого, я становлюсь более успешным с
DECLARE @MyBoolean bit;
SET @MyBoolean = 0;
SET @MyBoolean = 1 - @MyBoolean;
SELECT @MyBoolean;
тем не менее, это выглядит немного извращенным способом выразить что-то столь же простое, как отрицание.
Я что-то пропустила?
7 ответов:
использовать оператор~:
DECLARE @MyBoolean bit SET @MyBoolean = 0 SET @MyBoolean = ~@MyBoolean SELECT @MyBoolean
ваше решение является хорошим... вы также можете использовать этот синтаксис для переключения немного в SQL...
DECLARE @MyBoolean bit; SET @MyBoolean = 0; SET @MyBoolean = @MyBoolean ^ 1; SELECT @MyBoolean;
вычитание значения из 1 похоже, что это сделает трюк, но с точки зрения выражения намерения я думаю, что предпочел бы пойти с:
SET @MyBoolean = CASE @MyBoolean WHEN 0 THEN 1 ELSE 0 END
это более многословно, но я думаю, что это немного легче понять.
в SQL 2005 нет реального логического значения, битовое значение-это что-то другое.
бит может иметь три состояния, 1, 0 и null (потому что он сведения). SQL не преобразует их автоматически в true или false (хотя, смутно SQL enterprise manager будет)
лучший способ думать о битовых полях в логике - это целое число, равное 1 или 0.
Если вы используете логику непосредственно на битовое поле, он будет вести себя как любая другая переменная величина, т. е. логика будет истинной, если она имеет значение (любое значение) и ложной в противном случае.
чтобы назначить инвертированный бит, вам нужно будет использовать побитовый оператор NOT. При использовании побитового оператора NOT,'~', вы должны убедиться, что ваш столбец или переменная объявлена как бит.
Это не даст вам нуль:
Select ~1
Это:
select ~convert(bit, 1)
вот это:
declare @t bit set @t=1 select ~@t