Поскольку сравниваемые данные обнуляются bit
, вы можете использовать Coalesce( B, -1 ) = Coalesce( @B, -1 )
, чтобы выполнить сопоставление всех трех значений (0
, 1
и NULL
), сопоставив их с 0
, 1
и -1
.
Coalesce
следует правилам приоритет типа данных . С учетом bit
(B
) и int
(-1
) он преобразует bit
в int
, так что в результате получается значение int
.
Выражение не SARGable , но в этом случае OP заявил, что операция выполняется над одной строкой, уже идентифицированной PK, поэтому производительность сравнения не имеет значения.
Обратите внимание, что это случай ввода значения (-1
), которое не может встречаться в типе данных исходных данных (bit
). Это не то же самое, что выбрать произвольное магическое значение , которое, вероятно, не произойдет, например, год 1800
слишком далек в прошлом, чтобы когда-либо показываться в столбце DateSold
. За исключением недвижимости и прочего.
Бонусный совет:
Удобный способ подтвердить поведение - использовать SQL_Variant_Property
для отображения типа данных результата:
declare @B as Bit = 1;
select SQL_Variant_Property( Coalesce( @B, -1 ), 'BaseType' );