Преобразование значения varchar переполнило столбец int
для некоторого значения @nReservationID
:
SELECT @phoneNumber=
CASE
WHEN ISNULL(rdg2.nPhoneNumber ,0) = 0 THEN ISNULL(rdg2.nMobileNumber, 0)
ELSE ISNULL(rdg2.nPhoneNumber ,0)
END
from tblReservation_Details_Guest rdg2
where nReservationID=@nReservationID
почему я получаю эту ошибку?
Msg 248, Уровень 16, Состояние 1, Процедура USP_CRE_WEB_MEMBER_AUTOGENERATEDECV, строка 136 преобразование значение varchar '08041159620' переполняло столбец int.
2 ответов
Declare @phoneNumber int
select @phoneNumber=Isnull('08041159620',0);
выдает ошибку :
The conversion of the varchar value '8041159620' overflowed an int column.: select cast('8041159620' as int)
AS
целое число определяется как :
целое число (целое число) данные от -2^31 (-2,147,483,648) до 2^31 - 1 (2,147,483,647). Размер хранилища-4 байта. Синоним SQL-92 для int-целое число.
решение
Declare @phoneNumber bigint
спасибо Рави и другим пользователям .... Тем не менее у меня есть решение
SELECT @phoneNumber=
CASE
WHEN ISNULL(rdg2.nPhoneNumber ,'0') in ('0','-',NULL)
THEN ISNULL(rdg2.nMobileNumber, '0')
WHEN ISNULL(rdg2.nMobileNumber, '0') in ('0','-',NULL)
THEN '0'
ELSE ISNULL(rdg2.nPhoneNumber ,'0')
END
FROM tblReservation_Details_Guest rdg2
WHERE nReservationID=@nReservationID
просто нужно поставить '0' вместо 0