日期:2014-05-18  浏览次数:20398 次

请问大家是如何一次删除一千条数据的?
如题。
打个比方:页面上用 CheckBoxList 绑定了当前所有的用户,我勾选中了其中的1000个用户,然后按下删除按钮,大家通常都是怎样去删除掉这1000个用户的呢?请阐明你的思路,最好列出简单的代码,我使用的是 .net2.0 + Sql Server2000 ,谢谢。

------解决方案--------------------
如果不用考虑事务的问题,也就是说就删到第101个出错,前100个还是删除成功的话

我一般用拼接SQL语句,然后执行一次 cmd.ExecuteNonQuery();全部删除

C# code

        string whereClause = string.Empty;

        foreach (遍历CheckBoxList)
        {

            if (选中)
            {
                if (whereClause == string.Empty)
                    whereClause += "'" + 取值 + "'";
                else
                    whereClause += ",'" + 取值 + "'";
            }
        }
        if (whereClause != string.Empty)
        {
            SqlConnection cn = new SqlConnection(...);
            string strSQL = "delete from mytable where id in (" + whereClause + ")";
            SqlCommand cmd = new SqlCommand(strSQL, cn);
            cn.Open();
            cmd.ExecuteNonQuery();
            cn.Close();
        }

------解决方案--------------------
探讨
delete from table where id in (id1,id2,id3...and so on)
this is better way.

------解决方案--------------------
上面无非两种做法,一个是循环删除,一个是循环取主键,拼接字符串。
循环删除的人,根本就没有做过任何的效率测验,放大一下,到1w条,这样的做法会导致远程的i/o非常剧烈。。。
拼接字符串是个效率不错的办法,前提是安全性和数据完整性要求不高的情况下。。

另,如果只是做单表删除,可以启动数据库的事务,再循环体里面做删除,循环结束后一起提交。 效率也不会差。也可以支持参数化的删除,安全性也能得到提高。

原因:启动事务之后,一直保持连接,所以对数据库的访问相当于建立一次连接,提交,关闭连接。