由于个人考虑和分析的不周,此方法存在很多问题,感谢几位的评论和建议;使本人受益匪浅!底下是存在的问题:
1、有人提出用in比or效率更好?
2、用存储过程后避免在程序上拼接SQL语句,或者直接在程序上拼接。
3、跟普通的删除没咋区别,是否只删除一页?
本人还是用存储过程拼接解法吧,以下是修改后的:
/*
*作 者:lin sen
*功能说明:动态构建SQL语句之删除
*编写日期:2010年9月27日
**/---------------------------------------------------------------------------------------
drop procedure proc_DeleteMessage
go
create procedure proc_DeleteMessage
(
@tablename varchar(100), --表名
@colname varchar(100), --列名
@condition varchar(500) --列值
)
as
begin
declare @sql varchar(500)
select @sql='delete from '+@tablename+' where '+@colname+' in('+@condition+')'
print @sql
exec(@sql)
end
go
*作 者:lin sen
*功能说明:动态构建SQL语句之删除
*编写日期:2010年9月27日
**/---------------------------------------------------------------------------------------
drop procedure proc_DeleteMessage
go
create procedure proc_DeleteMessage
(
@tablename varchar(100), --表名
@colname varchar(100), --列名
@condition varchar(500) --列值
)
as
begin
declare @sql varchar(500)
select @sql='delete from '+@tablename+' where '+@colname+' in('+@condition+')'
print @sql
exec(@sql)
end
go
这边的话调用的时候还要处理,就是你传入的列值如果是字符串的,那么应该是in('','',''....),整形的是:in(, , ,....).
这样的话就解决1,2问题。对于3,这个做法是对在GridView中做批量选择删除,只要你有选中的都会删除。像上面前台
我们一般的做法是循环遍历一次调用一次过程,所以采用先循环遍历一次后,只调用一次就全部删除。