Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Verweisen Sie auf gespeicherte Prozeduren für alle Datenbanken auf dem Server

Diese Frage wurde bereits mehrfach auf SO gestellt, aber interessanterweise scheint es keinen Konsens über die beste Antwort zu geben. Hier ist also eine Zusammenfassung der wichtigsten Optionen, die verschiedene Leute vorgeschlagen haben (in keiner besonderen Reihenfolge):

  1. Fügen Sie es mit einem sp_ in die Master-Datenbank ein Präfix, damit SQL Server dort zuerst danach sucht
  2. Legen Sie es in die Modelldatenbank, damit es automatisch zu allen neuen DBs hinzugefügt wird
  3. Erstellen Sie eine Datenbank nur für "globale" Prozeduren (und andere Objekte) und rufen Sie sie mit dreiteiliger Benennung auf
  4. Wie 3, aber erstellen Sie Synonyme in anderen Datenbanken, damit Sie die dreiteilige Benennung nicht benötigen
  5. Verwenden Sie kommerzielle oder selbst entwickelte Tools, um die Bereitstellung in mehreren Datenbanken zu verwalten
  6. Wie 5, aber in einer Datenbank bereitstellen, dann diff die Datenbanken und wenden Sie das Diff-Skript an, um es in anderen Datenbanken bereitzustellen

Meiner Meinung nach ist 1 ein Nichtstarter, weil Microsoft ausdrücklich sagt Sie sollten keine Objekte in der master-Datenbank erstellen. 2 hört sich gut an, aber in der Praxis werden Datenbanken häufiger wiederhergestellt oder kopiert als von Grund auf neu erstellt (YMMV), daher ist die Verwendung von model unzuverlässig.

3 und 4 sind gut für Tabellen und Ansichten, aber der Ausführungskontext kann ein Problem für gespeicherte Prozeduren und Funktionen sein. Dies hängt jedoch von der Logik in den Verfahren ab und kann in Ihrem Fall praktikabel sein.

Aber 1-4 haben alle das potenzielle Problem, dass Sie nur eine Version dieses Objekts haben, wenn Sie nur ein Objekt haben, und es ist oft nützlich, verschiedene Versionen in verschiedenen DBs verfügbar zu haben, zum Testen oder nur für verschiedene Kunden.

5 und 6 sind Variationen desselben Themas, und ich persönlich finde, dass dies der beste Ansatz ist, da die Bereitstellung ein Problem ist, das Sie sowieso lösen müssen. Sie können es also genauso gut tun und sicherstellen, dass Sie über das Wissen, die Tools und die Prozesse verfügen in der Lage zu sein, Code sauber und schnell auf kontrollierte, automatisierte Weise in jeder Datenbank bereitzustellen.