К сожалению, метод проб и ошибок - ваш лучший вариант. Трудно предсказать точный оптимальный дизайн заранее, так как здесь нужно учитывать множество факторов. Откуда поступают данные для ваших обновлений? Если они приходят из общего ресурса, то многопоточность может не сильно помочь. Кроме того, дизайн таблицы (ов) вступает в игру. SQL Server - это сложная база данных, это пакетное обновление не обязательно связано с вводом / выводом. Здесь также может быть задействовано сетевое взаимодействие, как и конфигурация SQL Server.
Для оптимального количества потоков, снова проб и ошибок здесь. Я бы начал с двух, а затем попытался бы увеличить это число, даже помимо количества ядер, которое у вас есть. Причина в том, что у вас, вероятно, есть сеть между вашим клиентом и сервером. Кроме того, каждый поток должен поддерживать свое соединение с базой данных.
В качестве альтернативы обработке на стороне клиента вы можете загрузить на сервер весь входной файл пакетного задания (или все, что у вас есть), возможно, с использованием WCF. Затем вы можете использовать более совершенные механизмы для выполнения пакетного обновления вместо отдельных команд SQL.
Всегда "проверяй и измеряй".