Преобразовать в int со стилем данных NULL - PullRequest
0 голосов
/ 02 июля 2019

После обновления с 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, которое могло бы привести к такой разнице в результатах.

1 Ответ

0 голосов
/ 02 июля 2019

Согласно документации , которая аннотирована SQL Server (начиная с 2008 г.) :

стиль

Целочисленное выражение, которое определяет, как функция CONVERT будет преобразовывать выражение.Для значения стиля NULL возвращается NULL.Тип_данных определяет диапазон.

Возможно, ваш уровень совместимости был установлен на более раннюю версию в версии SQL Server 2012.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...