误差变换数据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]不是
请告诉我们,如果你需要了信息提前
感谢
使用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^31INT
整型(整数)的数据。存储大小是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
你为什么不使用varchar?或char? – malinois 2011-03-14 11:12:42
电话号码应该存储为字符串以保留前导零,但是您可以发布插入语句吗?还有桌子上的任何触发器? – 2011-03-14 11:13:28
SProc,bigint中@phone的定义是什么? – RichardTheKiwi 2011-03-14 11:18:51