Ich werde Aaron (und der akzeptierten Antwort) nicht zustimmen müssen.
Aarons Ansatz ist die Art und Weise, wie ich mit "DBA-Sachen" umgehe, z. B. Wartungsskripten. Ich würde dies niemals mit einer Bibliotheksfunktion tun wollen, die von einer Benutzerdatenbank aufgerufen würde.
Warum? Sie werden auf das Datenbankäquivalent von DLL Hell zusteuern .
Inkompatible Versionen
... Vor Windows 2000 war Windows dafür anfällig, da die COM-Klassentabelle von allen Benutzern und Prozessen gemeinsam genutzt wurde. Es kann nur ein COM-Objekt in einer DLL / EXE mit einer bestimmten globalen COM-Klassen-ID auf einem System deklariert werden. Wenn ein Programm eine Instanz dieser Klasse erstellen musste, erhielt es die aktuell zentral registrierte Implementierung. Infolgedessen kann eine Installation eines Programms, das eine neue Version eines gemeinsamen Objekts installiert, versehentlich andere Programme beschädigen, die zuvor installiert wurden.
Installieren Sie .net 4.5 auf einem Server, auf dem eine .net 2.0-Anwendung ausgeführt wird, und was passiert? Nichts, Ihre Anwendung verwendet weiterhin das 2.0-Framework. Aktualisieren Sie Ihre LastIndexOf-Funktion auf einem Server, auf dem 3 Anwendungsdatenbanken gehostet werden (im Rahmen eines Upgrades auf eine davon). Was passiert? Alle drei verwenden jetzt die neueste Version.
Die Alternative ist der Ansatz von SQL # . Dies wird in einem Schema in jeder Benutzerdatenbank installiert, sodass Sie die Datenbank für Application-X sicher aktualisieren können, ohne die Stabilität von Application-Y zu gefährden.
Wenn Sie in einer streng kontrollierten Änderungsverwaltungsumgebung arbeiten, haben Sie keine andere Wahl. Sie können eine freigegebene Komponente nicht aktualisieren, ohne alle Benutzer der Komponente zu testen. Wenn Sie an einem Ort arbeiten, der etwas "schneller und lockerer" ist, können Sie Ihr Risiko eingehen, indem Sie mit einem Patch / Upgrade ungewollt etwas kaputt machen.