程序开发 > MsSql > 正文

sql批量删除将varchar值转换成int失败因没用方法charindex

亮术网 2016-09-10 本网原创

  编写程序过程中,用 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 时失败的错误,不防立即尝试一翻。