我遇到了SQL Server问题。
我创建了一个这样的表:
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
转换varchar值时转换失败' 0%'数据类型int。
即使列descr
被正确定义为varchar(50)
。
答案 0 :(得分:2)
您的问题中缺少的是,您所拥有的只有两条values
行,而其中一行有{{1}的整数字面值}列,而不是字符串。
此示例产生相同的错误:
descr
我认为发生的是SQL Server首先尝试确定declare @t table (Descr varchar(50) not null)
insert into @t(Descr) values
('0%'),
(12)
子句中所有列的数据类型。使用数据类型优先级规则,它会在一行中观察values
字面值,在另一行中观察varchar
字面值,因此确定此列的整体类型为int
并尝试执行导致错误的转换。
在此过程中,它不使用有关int
将要放置到的目标表的任何信息,包括那里的列的数据类型。
答案 1 :(得分:1)
运行此并验证数据类型;
sp_columns Components
看起来像' descr'实际上是一个整数