首页 新闻 搜索 专区 学院

asp.net数据库开发

0
悬赏园豆:20 [已解决问题] 解决于 2010-03-08 10:31

我想要做如下操作:

使用sql语句:delete from 表a where id in(1,2,3)

注:in后面的参数我用字符串连接,在程序中通过组合字符串方式删除没有问题,但是现在我要用存储过程,传入参数,参数用varchar类型,就会提示数据类型转换出错,各位谁知道这个问题怎么解决,谢谢。

Joe_true的主页 Joe_true | 初学一级 | 园豆:98
提问于:2010-03-06 10:37
< >
分享
最佳答案
0

两种方法可以解决

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

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

收获园豆:20
查尔斯 | 老鸟四级 |园豆:3832 | 2010-03-06 11:33
其他回答(5)
0

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

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

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

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

langford | 园豆:710 (小虾三级) | 2010-03-06 11:20
0

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

西越泽 | 园豆:10633 (专家六级) | 2010-03-06 15:48
0

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)

应该是没问题的.

三阶 | 园豆:1436 (小虾三级) | 2010-03-06 19:41
0

还是参数化比较好,拼凑字符串不推荐。

参考:in、 not in查询 http://www.cnblogs.com/huxj/archive/2010/01/26/1656907.html

steven hu | 园豆:542 (小虾三级) | 2010-03-07 12:26
0

都老有才了!

Jaryleely | 园豆:367 (菜鸟二级) | 2010-03-07 12:51
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册