sql批量删除将varchar值转换成int失败因没用方法charindex
编写程序过程中,用 sql 语句操作数据库是家常便饭,而批量删除记录又是少不了要编写的功能。调用 sql 语句批量删除常常会抛出如下错误:
在将 Varchar 值 '9,7,4,2' 转换成数据类型 int 时失败。
有的时候改一下 sql 语句,又能正常执行;而有的时候无论怎么改,错误像影子一样始终不分离。下面先看怎么写批量删除的语句,才会出现将Varchar值转换成int失败的错误。
1、将 Varchar 值 '9,7,4,2' 转换成数据类型 int 时失败 sql 语句:
Create Proc DelAsIds
@Id Varchar(1000)--一串 Id 字符串,如 '9,7,4,2'
As
Delete From product Where Id in(@Id)
Go
这种情况一定会出现将Varchar值转换成int失败的错误,还有一种情况有时出现,有时又不出现,sql 代码如下:
Create Proc DelAsIds
@Id Varchar(1000)
As
exec('Delete From product Where Id in(' + @Id + ')')
Go
2、解决sql批量删除将Varchar值转换成int失败的方法
如果用 exec 执行 sql 语句还出错误,只能用 charindex 方法来解决,sql 代码作如下修改即可:
Alter Proc DelAsIds
@Id Varchar(1000)
As
Delete From product Where charindex(rtrim(Id), @Id) > 0
Go
用了 charindex 方法,批量删除传递一串记录 Id 字符串,再也不会出现将 Varchar 值 '9,7,4,2' 转换成数据类型 int 时失败的错误,不防立即尝试一翻。