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、行136varchar値「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

Raviと他のユーザーに感謝します....それでも私は解決策を持っています

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 に答える