Указатель NULL
- это тот, который указывает на никуда. Когда вы разыскиваете указатель p
, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p
является нулевым указателем, местоположение, хранящееся в p
, является nowhere
, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception
.
В общем, это потому, что что-то не было правильно инициализировано.
Используйте ~ оператор:
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 и пустой указатель (потому что это - данные). SQL автоматически не преобразовывает их в TRUE или FALSE (хотя, смутно руководитель предприятия SQL будет)
, лучший способ думать о битовых полях в логике как целое число, этому 1 год или 0.
при использовании логики непосредственно на небольшом поле это будет вести себя как любая другая переменная значения - т.е. логика будет верна, если это будет иметь значение (какое-либо значение) и ложь иначе.
BIT является типом числовых данных, не булевской переменной. Вот почему Вы не можете применить булевы операторы к нему.
SQL Server не имеет булева типа данных (не уверенный в SQL-СЕРВЕРЕ 2008), таким образом, необходимо придерживаться чего-то как решение @Matt Hamilton's.
Используйте ABS
, чтобы получить абсолютное значение (-1 становится 1) ...
DECLARE @Trend AS BIT
SET @Trend = 0
SELECT @Trend, ABS(@Trend-1)