此存储过程如何实现?
我在写一个程序,在一个记录集中让用户随意选择几条记录(比如选择了ID=20,25,26,27),然后在用户点击按扭后删除这几行,该过程在客户端很容易实现,只要执行“delect table1 where ID IN (20,25,26,27)”即可,可是这样必须给该客户删除数据的权限,这对数据库的安全是个隐患,我想用存储过程来实现此功能,程序大体如下:
CREATE PROCEDURE delete_recs
@jlj varchar(8000)
as
delete table1 where id in @jlj
select @@row_count
return(0)
但是我在执行delete_recs '20,25,26,27'时出现错误,提示varchar 到bigint 转换错误。我分析ID 是BIGINT 而@jlj是字符串的原因。可是该过程该如何实现呢?另外当用户选择了较多记录时该怎么办呢?如选择了全选,有几十万的记录,这将导致@jlj不够长,必须多次执行此过程,大家有什么好办法吗,我目前使用临时表将要删除的记录的id 用inert 语句保存在临时表中,然后调用存储过程,用delete 删除,此方法感觉比较笨拙。
------解决方案--------------------ID IN (20,25,26,27) 是可以的。
但是 '20,25,26,27'这个变量的执行语句是id in '20,25,26,27',当然会有错误。
使用动态语句。
declare @sql varchar(8000)
set @sql = 'delete table1 where id in' + @jlj
exec @sql
这样执行执行delete_recs '(20,25,26,27)'应该就可以了。