有一个表a
与其他表有很多关系。
在其中一些关系中,已设置casade delete rule
。
我正在尝试从所有数据中清除表a
,但是在使用delete from a
时遇到了几个问题
我有温度。将数据库置于简单恢复模式,但tran.log的问题仍然存在。
我一直在考虑拆分删除查询,但是还没有找到更快的方法。尝试top()
尝试使用where clause
拆分ID。
有人有任何提示可以更快地清空此表吗?
答案 0 :(得分:1)
我已经构建了以下脚本,用于将删除操作拆分为多个块,并基于主键“ id”在“消息”选项卡中报告状态。
DECLARE @countid int;
DECLARE @remaining int;
DECLARE @aantal int;
DECLARE @msg varchar(200);
SET @aantal = 100 -- Ammount that has to be deleted
SET @remaining = (select count(*) from Table);
SET @countid = (select MIN(id) + 100 from Table);
WHILE @remaining > 0
BEGIN
SET @msg = ('Remaining rows: ' + cast(@remaining as Varchar));
raiserror (@msg,0,1) with nowait
DELETE FROM Table
WHERE id < @countid
SET @remaining = @remaining - @@ROWCOUNT
SET @countid = @countid + @aantal
CHECKPOINT -- Since the Recovery Model is Simple this clears the transaction log
END