Всегда есть почти лучший способ сделать что-либо, чем динамический SQL ... таблицы имеют конечное число столбцов, даже если обновление является динамическим. В этом случае напишите полный оператор UPDATE с условными предложениями SET:
UPDATE MYTABLE
SET Col1 = CASE WHEN ISNULL(@Col1, '') = '' THEN Col1 ELSE @Col1 END,
Col2 = CASE WHEN ISNULL(@Col2, '') = '' THEN Col1 ELSE @Col2 END,
Col3 = CASE WHEN ISNULL(@Col3, '') = '' THEN Col1 ELSE @Col3 END,
Col4 = CASE WHEN ISNULL(@Col4, '') = '' THEN Col1 ELSE @Col4 END
WHERE Blah = 'blah'
Точное условие для ваших утверждений может отличаться - вы можете заменить оператор CASE на ISNULL () или COALESCE (), чтобы упростить управление.
Это означает, что запрос будет кэширован, выполнение будет быстрее (хотя это пренебрежимо мало), но, самое главное, код будет намного легче читать и отлаживать.