将varchar值“0%”转换为数据类型int时发生转换失败int
我正面临SQL Server的问题。将varchar值“0%”转换为数据类型int时发生转换失败int
我创建了一个表是这样的:
create table Components
(
pk BIGINT NOT NULL PRIMARY KEY IDENTITY,
id VARCHAR(50),
descr VARCHAR(50),
in_m INT,
in_iy INT,
p_fw VARCHAR(5000)
);
,我试图插入几个值:
insert into Components (id, descr, in_m, in_iy, p_fw)
values ('FW000_A', '0%', 0, 0, '[0.0,0.0,0.0]'),
('FW000_B', '1%', 1, 1, '[1.0,1.0,1.0]');
我得到以下错误:
Msg 245, Level 16, State 1, Line 111
Conversion failed when converting the varchar value '0%' to data type int.
即使列descr
正确定义为varchar(50)
。
有人可以帮我吗?为什么SQL Server试图将我的字符串转换为int值?
什么是从你的问题缺少的就是你的不仅仅是你出的两个values
线多了,其他的人的一个具有整字面值为descr
列,而不是字符串。
该示例产生同样的错误:
declare @t table (Descr varchar(50) not null)
insert into @t(Descr) values
('0%'),
(12)
我相信情况是,SQL Server第一次尝试,以确定数据类型为values
子句中的所有列。使用数据类型优先规则时,它观察一行中的varchar
文字和另一行中的int
文字,因此确定此列的总体类型为int
,并尝试执行导致该错误的转换。
在此过程中,它确实使用而不是使用有关要放置values
的目标表的任何信息,包括其中列的数据类型。
你是绝对正确的! !!在第二列中有一个没有引号的值'100',大约是第436个插入的元组,可能是我的sql自动代码生成器中的一个错误,但更重要的是,我学习了这个重要概念'在这个过程中,它不会使用任何有关将要放置值的目标表的信息,包括列的数据类型。“感谢大家的支持,问题解决了! – jjhorn
您的代码适用于SQL Server 2014中的我。http://rextester.com/UOOT87695您确定它是刚刚创建的同一张表吗?相同的模式等? –
我正在使用SQL Server Express 2012,但是,我有“使用mydb;”声明在文件的开头。编辑:我试图为创建和插入查询添加表示法[schema]。[表],但我得到的结果与以前一样... – jjhorn
如果您运行SQL跟踪(或使用https:// hibernatingrhinos.com/products/nhprof)通过线路传递的实际SQL是什么? – mjwills