14

对于某些值@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

为什么我会收到此错误?

消息 248,级别 16,状态 1,过程 USP_CRE_WEB_MEMBER_AUTOGENERATEDECV,第 136 行 varchar 值“08041159620”的转换溢出了一个 int 列。

4

3 回答 3

13
Declare @phoneNumber int

select @phoneNumber=Isnull('08041159620',0);

给出错误:

The conversion of the varchar value '8041159620' overflowed an int column.: select cast('8041159620' as int)

作为

整数定义为:

从 -2^31 (-2,147,483,648) 到 2^31 - 1 (2,147,483,647) 的整数(整数)数据。存储大小为 4 个字节。int 的 SQL-92 同义词是整数。

解决方案

Declare @phoneNumber bigint

参考

于 2013-03-08T07:27:39.797 回答
8

感谢拉维和其他用户....不过我已经找到了解决方案

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

于 2013-03-11T13:00:06.750 回答
0

只需在任何地方制作 rdg2.nPhoneNumber varchar 而不是 int !

于 2019-09-17T12:29:23.527 回答