Преобразование значения 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