На обоих уровнях совместимости 80 и 90 результат арифметического выражения над типами данных с плавающей запятой по умолчанию считается обнуляемым.
На уровне совместимости 90 - этот результат считается ненулевым, если (и только если) входы арифметического выражения ненулевые, и хотя бы один из ANSI_WARNINGS
или ARITHABORT
установлены на ON
.
Рассмотрим следующий сценарий:
declare @t as table
(
f1 float not null,
f2 float null
);
insert into @t (f1, f2) values (0.1, 1.0);
Следующее выражение будет считаться обнуляемым на обоих уровнях совместимости:
select f1 * f2
from @t;
тогда как следующее выражение будет считаться обнуляемым на уровне совместимости 80, но не обнуляемым на уровне совместимости 90:
-- in compatibility level 90 (or higher),
-- setting ansi_warnings to on implicitly sets arithabort to on.
SET ANSI_WARNINGS ON;
select f1 * f1 -- note: both inputs are non-nullable!
from @t;