2013-03-08 95 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

相關問題