У меня есть хранимая процедура, которая обновляет очень большую таблицу (с более чем 100 миллионами записей). Хранимая процедура обновляет записи в этой таблице.
Шаги следующие:
- Хранить идентификаторы записей для обновления в наборе записей (не все записи будут обновлены - только около 20000)
- Перебрать набор записей и вызвать хранимую процедуру для каждого идентификатора записи в наборе записей
- Каждый раз, когда хранимая процедура завершается (для каждой записи в наборе записей, упомянутых в части 1), обновляйте флаг в таблице, чтобы сообщить, что обновление завершено.
Я нахожу странное поведение. Похоже, что хранимая процедура передает управление обратно в VB6, прежде чем она закончит свои обновления и продолжает обработку следующей записи. Хранимая процедура затем отключается (для другого идентификатора записи). Поэтому существуют флаги, которые говорят, что обновлено (шаг 3), даже если хранимая процедура не была запущена (потому что она истекла по времени). Является ли это нормальным поведением, т. Е. Для хранимой процедуры передавать управление обратно в VB6 до того, как оно завершит работу?
Я прогуглил это и обнаружил, что это может быть из-за того, как хранимая процедура оптимизирована SQL Server. Я ожидаю, что управление будет передано обратно на VB6 только после завершения обновлений. Разве это не так?
Пожалуйста, обратите внимание, что я понимаю, что могут быть лучшие способы приблизиться к этому. Мой вопрос, в частности, относится к передаче SQL Server управления VB6 до того, как он завершит работу (обновление).