sql如何按条件删除大量数据(面试题)
今天碰到一个面试题:
有一个Student表有ID,Class,Name,Sex四个字段,要求删除Class =‘0903’,Sex =‘M' 的所有记录(满足条件的记录超过3万)
听说应该用分段处理,但是多次尝试都没有成功,所以向大侠请教!
[解决办法]
按id分段删除.
DECLARE @i INT
SET @i=5000
DELETE STUDENT WHERE ID<@i AND Class ='0903' AND Sex ='M'
WHILE @@ROWCOUNT>0
BEGIN
BEGIN TRAN
SET @i=@i+5000
DELETE STUDENT WHERE ID<@i AND Class ='0903' AND Sex ='M'
COMMIT TRAN
END
[解决办法]
SET ROWCOUNT 100WHILE 1=1BEGIN DELETE FROM Student WHERE lass ='0903' AND Sex ='M' IF @@ROWCOUNT<100 BREAKENDWHILE 1=1BEGIN DELETE TOP (100) FROM Student WHERE lass ='0903' AND Sex ='M' IF @@ROWCOUNT<100 BREAKEND
[解决办法]
--2000 or 2005set rowcount 5000DELETE STUDENT WHERE Class ='0903' AND Sex ='M'WHILE @@ROWCOUNT>0BEGIN DELETE STUDENT WHERE Class ='0903' AND Sex ='M'ENDset rowcount 0