Dưới đây là những gì tôi sẽ làm gì (Sybase/SQL Server cú pháp):
DECLARE @total_rows int
SELECT @total_rows = count(*)
FROM Source_Table
WHILE @total_rows > (SELECT count(*) FROM Target_Table)
BEGIN
SET rowcount 1000
print 'inserting 1000 rows'
INSERT Target_Table
SELECT *
FROM Source_Table s
WHERE NOT EXISTS(SELECT 1
FROM Target_Table t
WHERE t.id = s.id)
END
set rowcount 0
print 'done'
Hoặc bạn có thể làm điều đó dựa vào ID (giả định Id là một con số):
DECLARE @min_id int,
@max_id int,
@start_id int,
@end_id int
SELECT @min_id = min(id) ,
@max_id = max(id)
FROM Source_Table
SELECT @start_id = @min_id ,
@end_id = @min_id + 1000
WHILE @end_id <= @max_id
BEGIN
print 'inserting id range: ' + convert(varchar,@start_id) + ' to ' + convert(varchar,@end_id)
INSERT Target_Table
SELECT *
FROM Source_Table s
WHERE id BETWEEN @start_id AND @end_id
SELECT @start_id = @end_id + 1,
@end_id = @end_id + 1000
END
set rowcount 0
print 'done'
Nguồn
2008-10-02 12:13:57
Oracle có 'v $ session_longops': http://docs.oracle.com/cd/E11882_01/server.112/e25513/dynviews_3022.htm#i1415618 –