更新表 SET col = CONVERT(int, col)

Posted

技术标签:

【中文标题】更新表 SET col = CONVERT(int, col)【英文标题】:UPDATE table SET col = CONVERT(int, col) 【发布时间】:2016-12-01 14:49:15 【问题描述】:

我正在尝试这个

UPDATE table
SET col =  CONVERT(int, col)

我得到了

消息 245,第 16 级,状态 1,第 2 行 将 varchar 值“106/1”转换为数据类型 int 时转换失败。

【问题讨论】:

我不知道错误消息有什么令人困惑的地方。您的表中有一个值 106/1,它不是 int... 它在错误消息中字面意思是这样。检查您的数据... 只是好奇。你期待 [106 除以 1] 还是 [106] 或 [NULL] ? 前几天我给了你一个答案***.com/questions/40870435/…用我给你的案例陈述替换'col',它会起作用的。 我反之亦然。由于错误一个值未能做到 @PranayKumar 最简单的方法是运行更新以根据您之前的问题转换数据。完成后,运行更新以将列转换为 int。 【参考方案1】:

如果 2012+,您可以使用 TRY_CONVERT() ... 无效将返回 NULL

UPDATE table SET col = TRY_CONVERT(int, col)

如果不是 2012+

UPDATE table SET col = case when isnumeric(col+'.01')=0 then null else CONVERT(int,col) end

编辑(昨晚被 Shnugo 学会了 isnumeric() 技巧)

【讨论】:

感谢感谢 :-) Learned that isnumeric() trick last night myself :-) @Shnugo 我努力做一个有尊严的人。有点惭愧,没想到要加链接。【参考方案2】:

检查您传递给方法的参数类型,您的方法要求输入 Int 类型的参数,但您将其作为 varchar 提供,这就是它抛出异常的原因。 尝试给一个 int 一次

【讨论】:

欢迎来到 SO。发布一些代码以显示您的答案会有所帮助。

以上是关于更新表 SET col = CONVERT(int, col)的主要内容,如果未能解决你的问题,请参考以下文章

表字段部分更新

SqlServer 循环建表删除表更新表

sql将一个表中的所有数据更新到另一个表中

postgreSQL 怎么把时间字段设置成空

sql server中 int转varchar的方法

在 SQL Server 中将空字符串转换为 INT