2013-03-08 97 views
9

对于@nReservationID某个值:将varchar值的转换溢出int列

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 [email protected] 

为什么我得到这个错误?

消息248,级别16,状态1,过程 USP_CRE_WEB_MEMBER_AUTOGENERATEDECV,136线的 VARCHAR值 '08041159620' 的转化溢出int列。

回答

5

由于拉维和其他用户.... 不过我已经得到了解决

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 [email protected] 

只是需要把 '0',而不是的0

+0

我也遇到了这个问题。如果没有单引号,则比较整数值,但使用单引号比较字符串。 – ConfusedDeer 2014-02-25 19:16:33

+0

@phoneNumber的类型是什么? – Tito 2015-02-27 11:10:17

+3

啊,代表电话号码的好老人是一个整数行程:出于兴趣,我可以询问为什么你会用0作为电话号码吗?我问,因为0不是一个有效的数字。为什么不把它作为NULL? 0意味着什么? – 2015-07-01 12:10:05

7
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个字节。 int的SQL-92同义词是整数。

解决方案

Declare @phoneNumber bigint 

Reference

+0

我尝试了BIGINT,VARCHAR(100),NVARCHAR(100),TEXT,但没有任何效果。 Par回复karne k liye sukria :) – 2013-03-11 13:05:01

相关问题