После обновления с SQL Server 2012 до SQL Server 2017 хранимая процедура, отправляющая ежеквартальный отчет, не может предоставить информацию. Выявлена проблема, поскольку процедура не может создать переменную, которая управляет остальной частью процедуры.
Указано, что переменная не была установлена из-за оператора CONVERT, использующего стиль данных NULL. Если приведенный ниже запрос выполняется на SQL Server 2017, переменная @CountFrequency возвращает NULL, как и ожидалось, на основе документа Microsoft в отношении CONVERT и стиля данных NULL. Если этот запрос выполняется на SQL Server 2012 или 2016, @CountFrequency возвращает 4, что позволило хранимой процедуре успешно работать в нашей производственной среде до обновления.
DECLARE @OwnerCountUDF varchar(30) = '4'
, @CountFrequency int
;
IF ISNUMERIC(@OwnerCountUDF) = 1
SELECT @CountFrequency = CONVERT(int,@OwnerCountUDF,NULL)
ELSE
SELECT @CountFrequency = 1
;
SELECT ISNUMERIC(@OwnerCountUDF) 'Numeric'
, @OwnerCountUDF '@OwnerCountUDF'
, @CountFrequency '@CountFrequency'
;
Не удалось найти какую-либо документацию об изменении CONVERT, которое могло бы привести к такой разнице в результатах.