Массовое удаление с прогрессом

Я пытаюсь найти способ удалить много данных из таблицы, используя пакет с прогрессом удаления.

Для удаления я использую следующий код:

select 'to set rowcount'
WHILE @@ROWCOUNT <> 0
BEGIN
    DELETE TOP (1000) @table from @table
END

Но он не предоставляет информацию о состоянии удаления. Поэтому я пытаюсь добавить эту функциональность.

static void Main(string[] args)
{
    var cmd = _connection.CreateCommand();
    cmd.CommandText =
@"declare @table table(id int)
declare @i int = 0

insert into @table values (1)
WHILE @i < 20
BEGIN
insert into @table
select * from @table
set @i = @i + 1
END

select 'to set rowcount'
WHILE @@ROWCOUNT <> 0
BEGIN
select 'new batch'
DELETE TOP (100000) @table from @table
END";
    var reader = cmd.ExecuteReader();
    do
    {
        reader.Read();
        Console.WriteLine(reader[0]);
    } while (reader.NextResult());
    Console.WriteLine("done");
    Console.ReadLine();
}

Это работает, но выходные данные возвращаются в конце выполнения. Но я пытаюсь получить new batch перед обработкой каждой партии. Я не хочу разделять каждую партию на отдельные SqlCommand, Я чувствую, что это может повлиять на производительность.

0 ответов

Другие вопросы по тегам