关于sqlserver中存储过程里面in关键字的使用

这是我一个程序里要用到的,用户批量删除自己的简历,因为防止他删除其他人的信息,所以加了uid=@uid这个条件。存储过程:deletefromtable1whereidi... 这是我一个程序里要用到的,用户批量删除自己的简历,因为防止他删除其他人的信息,所以加了uid=@uid这个条件。

存储过程:delete from table1 where id in ('+@chooseid+') and uid=@uid

执行的时候,如果选择了一条信息,执行能成功,但是如果是两条以上,就会出现“无法转换为int”的错误。

我知道有另外一个方法是用:exec 来执行动态构建的操作命令。但是那样的话@uid这个变量就不能防止注入攻击了。
@chooseid这个变量我在程序里已经判断了只允许使用数字和逗号。

请问有什么好的办法吗?
@uid是字符型的。是用户的用户名

有一个用户表,和一个简历表,用户表里保存了多个登录用户的信息;简历表里有每个用户的简历,是一对多的关系,两个表是通过用户名关联的,用户登录以后可以管理 自己的简历,批量删除的时候我想用存储过程来做,所以就写了这个存储过程。

create.... deleteUserJianli
@chooseid varchar(50),--这是用户选择的要被删除的简历id
@uid varchar(50)--这是用户的用户名
as
delete from jianli where id in ('+@chooseid+') and uid=@uid
go
展开
 我来答
百度网友7f2d14fa9
推荐于2016-01-27 · 超过15用户采纳过TA的回答
知道答主
回答量:33
采纳率:0%
帮助的人:0
展开全部
首先就是@chooseid的问题
如果你这样in的话
即使你的 @chooseid=1,2,3
他也会把这几个看做一个整体
也就是把 id 同 '1,2,3'这个整体去比对
而不是拆开

这样的话只能用动态去构建

declare @sql varchar(1000)
set @sql=''
select @sql='delete from table1 where id in ('+ @chooseid+') and uid='+@uid
exec(@sql)

动态构建 也是可以增加@uid的条件的啊...
不太明白你的意思
你可以把代码写全
肯定是可以动态的
写全了 我给你写
百度网友2154512
2008-03-04 · 超过19用户采纳过TA的回答
知道答主
回答量:91
采纳率:0%
帮助的人:61.1万
展开全部
无法转换为int
是不是传递参数时多加了单引号。
或是少加拉,好好检查检查,是不是类型不匹配
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
人如游戏

2008-03-04 · 快乐游戏,游戏,生活,态度
人如游戏
采纳数:191 获赞数:778

向TA提问 私信TA
展开全部
存储过程里用exec 来执行动态构建的操作命令,@uid参数在存储过程定义为int,已经可以防止注入攻击了吧,
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式