我想要做如下操作:
使用sql语句:delete from 表a where id in(1,2,3)
注:in后面的参数我用字符串连接,在程序中通过组合字符串方式删除没有问题,但是现在我要用存储过程,传入参数,参数用varchar类型,就会提示数据类型转换出错,各位谁知道这个问题怎么解决,谢谢。
两种方法可以解决
1、采用整体传参数的方法,将1,2,3作为一个整体传入存储过程,不过存储过程内部其实也是拼sql的方式,然后用exec(@sql)来执行
2、当作三个参数来传递,@p1,@p2,@p3,存储过程内部为delete from 表a where id in(@p1,@p2,@p3)
那需要动态拼接字符串的,我给个实例吧!
declare @strsql varchar(max),@strwherevarchar(200)
set @strwhere = '''1'',''2'',''3''';//注意里面的引号
set @strsql = 'delete from 表a where id in (' + @strwhere + ')'
针对使用 三个参数来传递,@p1,@p2,@p3,存储过程内部为delete from 表a where id in(@p1,@p2,@p3)这样子的答案进行补充回复。在数据库中一般使用 delete from 表a where id in(1,2,3)是可以达到的,同等的语句可以有delete from 表a where id in('1','2','3')或者delete from 表a where id in('1,2,3').所以针对你的问题,你可以把你要传入的参数写成'1,2,3,4,5,6'这样子一个字符串传入你的存储过程,然后实现你的需求,虽然使用@p1,@p2,@p3这样子的参数能实现,但是针对不定长的参数时这样子是解决不了问题的,所以你可以使用'1,2,3,4,5,6'这样子的方式来解决...
1)如果你传入的参数是:'1','2','3','4',并且id列是int型,那么
set @strSql = 'DELETE FROM 表A WHERE CONVERT(varchar2,id) IN (' + @paramWhere + ')'
exec(@strSql)
2)如果你传入的参数是:1,2,3,4,并且id列是int型,那么那么
set @strsql = 'DELETE FROM 表A WHERE id IN (' + @paramWhere + ')'
exec(@strSql)
应该是没问题的.
都老有才了!