Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Riferimento Stored procedure per tutti i database nel server

Questa domanda è già stata posta più volte su SO, ma è interessante notare che non sembra esserci consenso sulla risposta migliore. Quindi ecco un riepilogo delle principali opzioni suggerite da varie persone (senza un ordine speciale):

  1. Mettilo nel database principale con un sp_ prefisso in modo che SQL Server lo cerchi prima lì
  2. Mettilo nel database del modello, in modo che venga aggiunto automaticamente a tutti i nuovi DB
  3. Crea un database solo per le procedure 'globali' (e altri oggetti) e chiamale usando la denominazione in tre parti
  4. Come 3, ma crea sinonimi in altri database in modo da non aver bisogno della denominazione in tre parti
  5. Utilizza strumenti commerciali o sviluppati in proprio per gestire la distribuzione su più database
  6. Come 5, ma distribuisci su un database, quindi diff i database e applicare lo script diff da distribuire ad altri database

A mio parere, 1 non è un inizio perché Microsoft dice esplicitamente non dovresti creare oggetti nel database principale. 2 suona bene, ma in pratica i database vengono ripristinati o copiati più spesso di quelli creati da zero (YMMV), quindi l'utilizzo del modello non è affidabile.

3 e 4 sono utili per tabelle e viste, ma il contesto di esecuzione può essere un problema per le procedure e le funzioni memorizzate. Ma questo dipende dalla logica delle procedure e potrebbe essere praticabile nel tuo caso.

Ma 1-4 hanno tutti il ​​potenziale problema che se hai un solo oggetto, hai solo una versione di quell'oggetto, ed è spesso utile avere versioni diverse disponibili in DB diversi, per il test o semplicemente per clienti diversi.

5 e 6 sono variazioni sullo stesso tema e personalmente trovo che questo sia l'approccio migliore perché l'implementazione è un problema che devi comunque risolvere, quindi potresti anche farlo e assicurarti di avere le conoscenze, gli strumenti e i processi in atto essere in grado di distribuire il codice in modo pulito e rapido su qualsiasi database in modo controllato e automatizzato.