Варианты 2 и 3 требуют больше данных, передаваемых на сервер при обновлении, и, следовательно, имеют большие накладные расходы на связь только для данных.
Имеет ли каждая строка свой набор обновленных столбцов или же набор столбцов обновляется одинаково для любого заданного прогона (но список может варьироваться от прогона к прогону)?
В последнем случае (тот же набор столбцов, обновленных в данном прогоне), тогда вариант 1, вероятно, будет работать лучше; инструкция будет подготовлена один раз и будет использоваться много раз с минимумом данных, передаваемых на сервер для каждого обновления.
В первом случае я хотел бы посмотреть, есть ли относительно небольшое подмножество столбцов, которые изменяются (скажем, 10 столбцов, которые изменяются в разных строках, даже если какая-то одна строка изменяется только до 3 из этих 10 ). В этом случае я бы, вероятно, выполнил параметризацию для 10 столбцов, принимая относительно небольшие накладные расходы на передачу значений 7-9 столбцов, которые не изменились для удобства одного подготовленного оператора. Если набор обновленных столбцов находится по всей карте (скажем, более 50 из 100 столбцов обновляются за всю операцию), то, вероятно, проще иметь дело со всем лотом.
В некоторой степени это зависит от того, насколько легко ваш хост-язык (клиентский API) позволяет обрабатывать различные возможные способы параметризации обновлений.