我在写一个程序,在一个记录集中让用户随意选择几条记录(比如选择了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 删除,此方法感觉比较笨拙。
@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 删除,此方法感觉比较笨拙。
解决方案 »
- 一个存储过程问题
- 插入多字段随机数,并保证这个随机数是唯一的
- 请教个关于xml的问题
- 谢谢,高手帮忙~~~~~急急急急急急急
- 请教一SQL
- MSDE是可以免费发布吗?
- 谁能够告诉我这样一句教本作用???SELECT 'Index Name' = i.name, 'Statistics Date' = STATS_DATE(i.id, i.indid) FROM sysobjects o, s
- 急急急!!!请帮忙讲讲如何将oracal数据库的内容转换为MySQL,如果太难的话能先转换为sql server也行?
- 这么会有这种提示,该怎么办
- powerdesigner如何把name和code同时显示在module中?
- SQL中能否用两个字段来唯一表示一条记录?
- 请教一些基础的问题?
@jlj varchar(8000)
as
declare @sql varchar(8000)
set @sql = 'delete table1 where id in' + @jlj
exec (@sql)
select @@row_count
@jlj varchar(8000)
as
declare @sql varchar(8000)
set @sql = 'delete table1 where id in ' + @jlj
exec (@sql)
select @@rowcount
那么对于全选后剔除部分,我考虑还是我采用的老办法可能会比较好,既把要删除的数据ID用insert语句保存在临时表中,然后调用存储过程删除比较好,因为如果用每个id 为9位,加上逗号,共10位,varchar最大长度为8000,也就是说调用存储过程,最多每次能处理8000/10=800条记录,如果记录较多如10万条左右,无疑将调用100000/800=100次,如果将所有删除记录的循环过程写在一个事物中,并且用in 语句选择数据,无疑将划很长时间(估计>几分种)。至于采用保留的数据的方法,其实在数据库中所删除的只是符合一定条件的记录集,再经过客户手工选择的数据,只占很小的一部分,因此保留的方法可能也行不通。我用的老办法在insert 10万条记录的过程也很长,要考虑超时连接的问题,真不知道该如何解决。
select top(5) *
into #temp from copy
truncate table --copy高速删除上亿条
--删除及条件
insert copy select * from #temp