Недавно я присоединился к компании и заметил, что многие хранимые процедуры повторяют один и тот же раздел кода. Я заметил, потому что мне было поручено изменить небольшой раздел этого кода в каждом SP, что это произошло :)
Это довольно здоровенный кусок кода, около 30 строк. Код является частью оператора вставки и в основном объединяет 4 таблицы вместе с WHERE/AND
условиями, которые на самом деле не меняются от SP к SP. Это выглядит примерно так:
...
...
FROM <TableOne>
INNER JOIN <TableTwo> ON ...
AND .....
AND .....
LEFT JOIN <TableThree> ON ...
AND .....
AND .....
WHERE .....
AND .....
AND .....
AND MedicalPlanCode IN ('abc', 'def', 'ghi')
Единственная часть, которая изменяется от SP к SP, это значения ( 'abc', 'def', 'ghi' )
Также может быть различное количество этих значений, поэтому у некоторых SP будет 2 значения, у других - 5 и т. Д.
Все, что я думаю об изменении этого раздела кода на динамический SQL, и я не уверен, стоит ли это того. Однако программист во мне ненавидит эту ситуацию.
Должен ли я попытаться реализовать какую-то форму повторного использования кода? Будет ли это иметь ROI? Какие у меня варианты? Мне пришлось пройти около 100 хранимых процедур, что заняло около часа.
100 SP распределены по 20 разным базам данных. У меня есть разрешения на создание представления.
источник
Это решение заменит необходимость иметь 100+ проков, делающих одно и то же. у вас есть проц и функция. Функция разбивает все ваши медицинские коды от строки до таблицы, которую можно использовать в CROSS APPLY в новом процессе. Таким образом, вам нужно вызвать только один процесс. Конечно, вам придется обновить весь код, вызывающий другие процессы, чтобы использовать только этот.
источник