Лучшее решение - написать основанный на множестве процесс для обработки удаления (попробуйте запустить его с помощью курсора, чтобы удалить 10000 записей, и вы поймете, почему) или добавить код на основе множества в текущий процесс с помощью параметр, сообщающий вам, следует ли запускать основанную на наборе или единственную часть записи процедуры (это, по крайней мере, сохраняет ее вместе для целей обслуживания).
В SQL Server 2008 вы можете использовать переменную таблицы в качестве входной переменной. Если вы переписываете процесс на основе множеств, вы можете использовать ту же логику и запускать ее независимо от того, отправляет ли он одну запись или десять тысяч. Вам может понадобиться пакетный процесс, чтобы избежать одновременного удаления миллионов записей и блокировки таблиц на несколько часов. Конечно, если вы сделаете это, вам также нужно будет отрегулировать, как вызывается currect sp.