关于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 展开
存储过程: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 展开
3个回答
展开全部
首先就是@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的条件的啊...
不太明白你的意思
你可以把代码写全
肯定是可以动态的
写全了 我给你写
如果你这样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的条件的啊...
不太明白你的意思
你可以把代码写全
肯定是可以动态的
写全了 我给你写
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询