Булевская переменная 'НЕ' в T-SQL, не работающем над 'разрядным' типом данных?

Указатель NULL - это тот, который указывает на никуда. Когда вы разыскиваете указатель p, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p является нулевым указателем, местоположение, хранящееся в p, является nowhere, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception.

В общем, это потому, что что-то не было правильно инициализировано.

74
задан abatishchev 6 December 2011 в 11:23
поделиться

6 ответов

Используйте ~ оператор:

DECLARE @MyBoolean bit
SET @MyBoolean = 0
SET @MyBoolean = ~@MyBoolean
SELECT @MyBoolean
143
ответ дан Jonas Lincoln 24 November 2019 в 11:49
поделиться

Вашим решением является хорошее..., можно также использовать этот синтаксис для переключения немного в SQL...

DECLARE @MyBoolean bit;
SET @MyBoolean = 0;
SET @MyBoolean = @MyBoolean ^ 1; 
SELECT @MyBoolean;
25
ответ дан Galwegian 24 November 2019 в 11:49
поделиться

Вычитание значения от 1 похоже, это добьется цели, но с точки зрения выражения намерения я думаю, что предпочел бы идти с:

SET @MyBoolean = CASE @MyBoolean WHEN 0 THEN 1 ELSE 0 END

Это является более подробным, но я думаю, что немного легче понять.

21
ответ дан Matt Hamilton 24 November 2019 в 11:49
поделиться

В SQL 2005 там не является реальным булевым значением, битовое значение - что-то еще действительно.

Немного может иметь три состояния, 1, 0 и пустой указатель (потому что это - данные). SQL автоматически не преобразовывает их в TRUE или FALSE (хотя, смутно руководитель предприятия SQL будет)

, лучший способ думать о битовых полях в логике как целое число, этому 1 год или 0.

при использовании логики непосредственно на небольшом поле это будет вести себя как любая другая переменная значения - т.е. логика будет верна, если это будет иметь значение (какое-либо значение) и ложь иначе.

9
ответ дан Keith 24 November 2019 в 11:49
поделиться

BIT является типом числовых данных, не булевской переменной. Вот почему Вы не можете применить булевы операторы к нему.
SQL Server не имеет булева типа данных (не уверенный в SQL-СЕРВЕРЕ 2008), таким образом, необходимо придерживаться чего-то как решение @Matt Hamilton's.

5
ответ дан aku 24 November 2019 в 11:49
поделиться

Используйте ABS , чтобы получить абсолютное значение (-1 становится 1) ...

DECLARE @Trend AS BIT
SET @Trend = 0
SELECT @Trend, ABS(@Trend-1)
4
ответ дан 24 November 2019 в 11:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: