转换varchar值时转换失败' 0%'到数据类型int

时间:2017-07-06 14:03:27

标签: sql sql-server

我遇到了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)

是的,有人可以帮帮我吗?为什么SQL Server尝试将我的字符串转换为int值?

2 个答案:

答案 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'实际上是一个整数