在SQL中将表达式转换为数据类型int时出错

时间:2018-12-29 11:25:21

标签: sql sql-server

我创建了一个包含5列的表,现在我试图通过手动使用insert into方法向该表中添加新值,但是即使所有值都相同,我也会收到错误消息数据类型与给定数据类型相同。

我什至试图删除整个表并创建一个新表,然后再次重新添加列,但仍然面临相同的问题。我能够添加一列,就是它无法添加任何其他列。

以下屏幕截图显示了表的结构

enter image description here

这些是我要添加的值:

insert into customers 
values (2, 'john', 'mexico', 87564, 6573892841),
       (3, 'thomas', 'brazil', 23897, 8734521897),
       (4, 'tim', 'dublin', 432987, 4328795478),
       (5, 'robert', 'centralccity', 83006, 1357986420),
       (6, 'rodeys', 'ireland', 601356, 8743561289),
       (7, 'barry', 'london', 101626, 9765423678),
       (8, 'cisco', 'manchester', 87235, 8743561288),
       (9, 'barry', 'london', 101636, 8712345288),
       (10, 'amy', 'manchester', 87235, 8743165288),
       (11, 'catline', 'singapore', 10101, 65436783),
       (12, 'guru', 'chennai', 600018, 7402367111)

3 个答案:

答案 0 :(得分:6)

问题是2折,首先是您有8712345288之类的值,对于int来说太大了。一个int可以存储的最大数量为2,147,483,647;因此您的价值大约是它的4倍。

但是,第二个问题是您将电话号码存储为数字数据类型。这实际上是一个坏主意。电话号码可以包含前导零,格式要求,国家/地区代码,扩展名,所有这些数字数据类型都无法存储,例如int

通过更改列的定义,将电话号码存储为varchar

ALTER TABLE dbo.customers ALTER COLUMN Phone varchar(20);

然后再次插入您的数据,就可以了。

答案 1 :(得分:4)

其中一些电话号码过大以适合int,请改用bigint

答案 2 :(得分:1)

这是因为您正在尝试存储大于整数限制的值。正整数的最大值为2^31-1 (2,147,483,647),但您尝试插入的值6573892841大于最大值。

您可以将该类型转换为varchar,然后它将如下所示工作。

create table #customers (Id int,
name varchar(10),
city varchar(50),
pincode int,
phone varchar(50))

insert into #customers values (2,'john','mexico',87564,6573892841)
,(3,'thomas','brazil',23897,8734521897)
,(4,'tim','dublin',432987,4328795478)
,(5,'robert','centralccity',83006,1357986420)
,(6,'rodeys','ireland',601356,8743561289)
,(7,'barry','london',101626,9765423678) 
,(8,'cisco','manchester',87235,8743561288)
,(9,'barry','london',101636,8712345288) 
,(10,'amy','manchester',87235,8743165288)
,(11,'catline','singapore',10101,65436783) 
 ,(12,'guru','chennai',600018,7402367111)

SQL Server Datatype Value Range