为了账号安全,请及时绑定邮箱和手机立即绑定

asp.net数据库开发

asp.net数据库开发

慕后森 2018-12-06 19:58:43
我想要做如下操作: 使用sql语句:delete from 表a where id in(1,2,3) 注:in后面的参数我用字符串连接,在程序中通过组合字符串方式删除没有问题,但是现在我要用存储过程,传入参数,参数用varchar类型,就会提示数据类型转换出错,各位谁知道这个问题怎么解决,谢谢。
查看完整描述

6 回答

?
紫衣仙女

TA贡献1839条经验 获得超15个赞

两种方法可以解决

1、采用整体传参数的方法,将1,2,3作为一个整体传入存储过程,不过存储过程内部其实也是拼sql的方式,然后用exec(@sql)来执行

2、当作三个参数来传递,@p1,@p2,@p3,存储过程内部为delete from 表a where id in(@p1,@p2,@p3)

查看完整回答
反对 回复 2019-01-07
?
慕村9548890

TA贡献1884条经验 获得超4个赞

那需要动态拼接字符串的,我给个实例吧!

declare @strsql varchar(max),@strwherevarchar(200)

set @strwhere = '''1'',''2'',''3''';//注意里面的引号

set @strsql = 'delete from 表a where id in (' + @strwhere + ')'

查看完整回答
反对 回复 2019-01-07
?
慕的地6264312

TA贡献1817条经验 获得超6个赞

针对使用  三个参数来传递,@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'这样子的方式来解决...

查看完整回答
反对 回复 2019-01-07
?
慕娘9325324

TA贡献1783条经验 获得超4个赞

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)

应该是没问题的.

查看完整回答
反对 回复 2019-01-07
?
一只斗牛犬

TA贡献1784条经验 获得超2个赞

都老有才了!

查看完整回答
反对 回复 2019-01-07
  • 6 回答
  • 0 关注
  • 637 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信