Это на самом деле ошибка компилятора. Когда вы запускаете пакет, T-SQL анализируется, и выдается ошибка в операторах SELECT COUNT(NULL);
и SELECT COUNT(NULL/NULL);
в это время, а не во время выполнения.
Если вы запустите пакет ниже, вы увидите это довольно быстро:
PRINT 'testing 1'
SELECT COUNT(NULL); --Error at compile
GO
PRINT 'testing 2'
SELECT COUNT(1/NULL); --Runs
GO
PRINT 'testing 3'
SELECT COUNT(NULL/NULL); --Error at compile
GO
PRINT 'testing 4'
SELECT COUNT(0/0); --Error at run time
Обратите внимание, что операторы testing 1
и testing 3
никогда не появляются.
Значение NULL
, onу него нет типа данных. Выражение, в котором все стороны выражения равны NULL
, фактически будет иметь неизвестный тип данных.
Если указать тип данных NULL
, проблема не возникает. случиться:
PRINT 'testing 5'
SELECT COUNT(CONVERT(int,NULL));
GO
PRINT 'testing 6'
DECLARE @N int;
SELECT COUNT(@N);