Я собираюсь не согласиться с Аароном (и принятым ответом).
Подход Аарона - это то, как мне нравится иметь дело с «вещами DBA», например, сценариями обслуживания. Я никогда не хотел бы делать это с библиотечной функцией, которая будет вызываться пользовательской базой данных.
Почему? Вы отправитесь в базу данных, эквивалентную DLL Hell .
Несовместимые версии
... До Windows 2000 Windows была уязвима для этого, потому что таблица классов COM была общей для всех пользователей и процессов. Только один объект COM в одной DLL / EXE может быть объявлен как имеющий определенный глобальный идентификатор класса COM в системе. Если какой-либо программе требовалось создать экземпляр этого класса, она получала любую централизованно зарегистрированную реализацию. В результате установка программы, устанавливающей новую версию общего объекта, может непреднамеренно нарушить работу ранее установленных программ.
Установите .net 4.5 на сервер, на котором работает приложение .net 2.0, и что происходит? Ничего, ваше приложение продолжает использовать фреймворк 2.0. Обновите функцию LastIndexOf на сервере, где размещены 3 базы данных приложений (в рамках обновления до одной из них), и что происходит? Все трое сейчас используют последнюю версию.
Альтернативой является подход, принятый в SQL # . Он устанавливается в схему в каждой пользовательской базе данных, поэтому вы можете безопасно обновить базу данных для Application-X, не рискуя стабильностью Application-Y.
Если вы работаете в жестко контролируемой среде управления изменениями, у вас не будет выбора, вы не сможете обновить общий компонент без тестирования всех потребителей этого компонента. Если вы работаете где-то немного более «быстро и свободно», вы можете рискнуть непреднамеренно сломать что-то с помощью патча / обновления.