您的位置:首页 > 数据库

【MS SQL Server】SQL删除数据(分段实现大量数据的删除操作)

2014-10-12 11:25 387 查看
1、当删除的数据量比较少时(万条数据以下):使用普通的数据删除方法即可,delete from .....

2、当数据量很大时,如果使用一般的删除办法将会出现很多的问题,比如服务器超时、ODBC错误等等;此时我们需要改变删除的方法,可以使用分段的形式进行数据删除,而不是一下子全部删除。

SET rowcount 5000

delete from collectiontext where

cltextid not in

   (

       select min(cltextid)

        from collectiontext group by urladdr

)

while @@rowcount>0

begin

   delete from collectiontext where

cltextid not in

   (

       select min(cltextid)

        from collectiontext group by urladdr

)

end

set rowcount 0

也可以写成:

 

DECLARE @COUNT AS BIGINT;

SET @COUNT=1;

WHILE(@COUNT>0)

BEGIN

  SET rowcount  3000

  delete  from collectiontext where cltextid not in

  (

    select min(cltextid) from collectiontext group by urladdr

  )

  SET @COUNT=@@ROWCOUNT;

  --SET @COUNT=@COUNT-1;

END

--重置rowcount=0

set rowcount 0

3、使用TRUNCATE TABLE 清空数据,清空之间用临时表保存要留下的数据记录,然后再放回表中。

但是TRUNCATE处理的表不能和其他表有外键引用的关系,否则不能实现。

最后,实现不行的话,还可以利用数据库管理工具自带的数据导出功能将符合要求的数据先导出到某个文件,然后将整个表删除再新建一个一样结构的表,最后将刚才导出的数据导入到新建的表中。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ms sql server