我想编写一条SQL命令,该命令将删除所有行,其中一列的最后一位为0,最后一位为1,最后一位为2,依此类推。
delete from BASE_TABLE where SET = 'ABCD'
该语句将立即删除400,000+行,而我的服务无法处理。
要分解它,我想说类似
delete from BASE_TABLE
where BASE_TABLE.SET = 'ABCD'
and BASE_TABLE.TAG LIKE '%0'
在我使用LIKE '%0'
删除所有内容后,我想一直使用LIKE '%1'
删除所有内容,
这可能吗?
答案 0 :(得分:4)
您可以在while
循环中执行此操作。但是,更典型的方法是:
delete top 10 percent from BASE_TABLE
where BASE_TABLE.SET = 'ABCD';
或者,您可以处理一个固定的数字:
delete top 1000 from BASE_TABLE
where BASE_TABLE.SET = 'ABCD';
然后可以将其循环:
declare @x int;
set @x = 1;
while @x > 0 begin
delete top 1000 from BASE_TABLE
where BASE_TABLE.SET = 'ABCD';
set @x = @@ROWCOUNT;
end;
不要将percent
方法放在while
循环中。它将持续很长时间-因为百分比基于当时表中的行。我相信它将最终删除最后一行,但是会有很多迭代。
答案 1 :(得分:1)
如果您只关心系统负载,只需删除顶部的X行。这是语法
DELETE TOP (top_value) [ PERCENT ]
FROM table
[WHERE conditions];
如果要按特定顺序删除,可以应用订单。如果您希望该过程为您完成所有工作,请将其循环放置直到表为空。
答案 2 :(得分:1)
您需要[0-9]%
中的where clause
这将删除所有以0 to 9
开头的行,如果要以%
结尾的行向左移动,
%[0-9]