sql >> Databasteknik >  >> RDS >> Sqlserver

Referens Lagrade procedurer för alla databaser i servern

Den här frågan har ställts flera gånger redan på SO, men intressant nog verkar det inte finnas någon konsensus om det bästa svaret. Så här är en sammanfattning av de viktigaste alternativen som olika personer har föreslagit (utan speciell ordning):

  1. Sätt den i huvuddatabasen med en sp_ prefix så att SQL Server letar efter det där först
  2. Sätt den i modelldatabasen så att den automatiskt läggs till i alla nya DB:er
  3. Skapa en databas endast för "globala" procedurer (och andra objekt) och anropa dem med tredelad namngivning
  4. Som 3, men skapa synonymer i andra databaser så att du inte behöver det tredelade namnet
  5. Använd kommersiella eller egenutvecklade verktyg för att hantera distribution till flera databaser
  6. Som 5, men distribuera till en databas, sedan diff databaserna och tillämpa diff-skriptet för att distribuera till andra databaser

Enligt min åsikt är 1 en icke-startare eftersom Microsoft explicit säger du ska inte skapa objekt i huvuddatabasen. 2 låter bra men i praktiken återställs eller kopieras databaser oftare än de skapas från grunden (YMMV), så att använda modellen är opålitlig.

3 och 4 är bra för tabeller och vyer, men exekveringskontext kan vara ett problem för lagrade procedurer och funktioner. Men detta beror på logiken i procedurerna och det kan fungera i ditt fall.

Men 1-4 har alla det potentiella problemet att om du bara har ett objekt så har du bara en version av det objektet, och det är ofta användbart att ha olika versioner tillgängliga i olika DB:er, för testning eller bara för olika kunder.

5 och 6 är varianter på samma tema och jag tycker personligen att detta är det bästa tillvägagångssättet eftersom implementering är ett problem du måste lösa ändå, så du kan lika gärna göra det och se till att du har kunskapen, verktygen och processerna på plats för att kunna distribuera kod rent och snabbt till vilken databas som helst på ett kontrollerat, automatiserat sätt.



  1. Välj poster där datum ==nu + 21 dagar (INTE mellan)

  2. Välj senaste infognings-id

  3. Hur ansluter man till MS SQL Server med Inno Setup?

  4. SQL-sats för att sammanfoga och ge resultat i flera kolumner