我遇到了 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
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
并尝试执行导致错误的转换。
在此过程中,它不会使用有关要在其中放置值
的目标表的任何信息,包括其中列的数据类型。
关于sql - 将 varchar 值 '0%' 转换为数据类型 int 时转换失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44951159/