误差变换数据bigint类型为int [SQL服务器]

问题描述:

我有使用存储的过程中插入一个电话号码到数据库中。但同时插入其示出了误差作为误差变换数据bigint类型为int [SQL服务器]

SQLEXCEPTION:错误数据转换 键入bigint为int。

long phoneNumber = Convert.ToInt64(Phone.Text); 

cmd.CommandType = CommandType.StoredProcedure; 

cmd.Parameters.AddWithValue("@phone",phoneNumber); 

cmd.ExecuteNonQuery(); 

即此参数, DBTYPE是Int64的 SQLDbType是BigInt有

我已经使用BigInt有作为SQL Server还列的数据类型。

那么,什么可能是错怎么回事..

我发现1999999999 [< 2^32]是越来越正确插入并2999999999 [> 2^32]不是

请告诉我们,如果你需要了信息提前

感谢

+3

你为什么不使用varchar?或char? – malinois 2011-03-14 11:12:42

+2

电话号码应该存储为字符串以保留前导零,但是您可以发布插入语句吗?还有桌子上的任何触发器? – 2011-03-14 11:13:28

+1

SProc,bigint中@phone的定义是什么? – RichardTheKiwi 2011-03-14 11:18:51

使用VARCHAR(10)或CHAR(10),而不是BIGINT。

看到此int, bigint, smallint, and tinyint

BIGINT
整型(整数)从-2^63 (-9,223,372,036,854,775,808)数据通过 2^63-1(9,223,372,036,854,775,807)。 存储大小是8个字节。 1 (2,147,483,647) - 从-2^31 (2,147,483,648)通过2^31

INT
整型(整数)的数据。存储大小是4 字节。 int的SQL-92同义词是 整数。

OP表示:

我发现1999999999 [< 2^32]是 得到正确插入和 2999999999 [> 2^32]不是

1,999,999,999装配在一个整数,因为它小于2,147,483,647,但2,999,999,999并不是因为它大于2,147,483,647

最好的选择是使用varchar(10)来存储电话号码。如果您对您的字符串歌厅字符而非数字的担忧,可以验证这样的:

您可以验证您的字符串是这样的:

declare @PhoneNumber varchar(10) 
select @PhoneNumber='123e0' 
if @PhoneNumber LIKE '%[^0-9]%' 
    print 'NOT NUMERIC' 
else 
    print 'NUMERIC' 

select @PhoneNumber='1234567890' 
if @PhoneNumber LIKE '%[^0-9]%' 
    print 'NOT NUMERIC' 
else 
    print 'NUMERIC' 

这里是你运行上面的时候是什么:

NOT NUMERIC 
NUMERIC