将varchar值“n”转换为数据类型smallint时转换失败

cpjpxq1n  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(1115)

我只是将一些数据从一个表插入到另一个表中,但遇到了一个错误:
将varchar值“n”转换为数据类型smallint时转换失败。
因为我要插入的一列是 smallint 数据类型,但数据以“n”的形式出现,因此引发了一个错误。

Insert into target
(
ID
) 
select
id
from source

数据类型 id 来源是 varchar(10) 目标id的数据类型为 smallint .
有人能提出答案吗?我试过使用cast函数,但不起作用。

ubbxdtey

ubbxdtey1#

正如其他人提到的,不能将值为'n'的varchar(10)转换为smallint。
您需要决定将什么值(如果有的话)插入到源值所在的目标表中 [id] 包含0-9以外的字符或超出smallint的范围。
如果决定将该值设为null,则可以使用 TRY_CAST() 函数。。。

INSERT  INTO target ( [ID] )
SELECT  TRY_CAST ( [id] AS SMALLINT )
FROM    source ;

这将插入一个 NULL ,如果 [id] 包含0-9以外的字符或转换为超出smallint范围的整数。
如果您决定在这个条件下插入一个预先确定的数字(例如,0),您可以将 TRY_CAST() 用一个 COALESCE() 功能。。。

INSERT  INTO target ( [ID] )
SELECT  COALESCE ( TRY_CAST ( [id] AS SMALLINT ), 0 )
FROM    source ;

这将插入一个 0 ,如果 [id] 包含0-9以外的字符或转换为超出smallint范围的整数。

相关问题