Tsql 拆分删除查询

Tsql 拆分删除查询,tsql,sql-server-2012,Tsql,Sql Server 2012,有一个表a与其他表有许多关系。 在其中一些关系上,已设置casade删除规则 我试图从所有数据中清除表a,但在使用“从表中删除”时遇到了几个问题 删除过程非常缓慢 事务日志正在填充磁盘空间,这是一个问题。使查询挂起。 我有临时工。将数据库置于简单恢复模式,但tran.log的问题仍然存在 我一直在考虑拆分delete查询,但还没有找到更快的方法。尝试使用where子句拆分ID 有没有人能更快地清空此表的提示?我构建了以下脚本,将删除内容分块,并根据主键“id”在“消息”选项卡中报告状态 DECL

有一个表a与其他表有许多关系。 在其中一些关系上,已设置casade删除规则

我试图从所有数据中清除表a,但在使用“从表中删除”时遇到了几个问题

删除过程非常缓慢 事务日志正在填充磁盘空间,这是一个问题。使查询挂起。 我有临时工。将数据库置于简单恢复模式,但tran.log的问题仍然存在

我一直在考虑拆分delete查询,但还没有找到更快的方法。尝试使用where子句拆分ID


有没有人能更快地清空此表的提示?

我构建了以下脚本,将删除内容分块,并根据主键“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

磁盘空间是个问题,有没有人能更快清空这个表的提示?删除此表中的所有外键,使用truncate table删除数据,然后重新创建外键。@ZoharPeled这不会删除相关关系表中的数据。@Igor Atm我无法扩展磁盘空间,这就是为什么我将其设置为“简单”,并希望批量删除它。但即使是排名前100的公司也会产生巨大的交易记录。有关于如何批量删除它的提示吗?