sql >> Databasteknik >  >> RDS >> Sqlserver

Lagrade procedurer/DB-schema i källkontroll

Vi väljer att skripta allt, och det inkluderar alla lagrade procedurer och schemaändringar. Inga wysiwyg-verktyg och inga snygga "synkroniseringsprogram" behövs.

Schemaändringar är enkla, allt du behöver göra är att skapa och underhålla en enda fil för den versionen, inklusive alla schema- och dataändringar. Detta blir ditt konverteringsskript från version x till x+1. Du kan sedan köra den mot en produktionsbackup och integrera den i din "dagliga build" för att verifiera att den fungerar utan fel. Observera att det är viktigt att inte ändra eller ta bort redan skrivet schema / dataladdning sql eftersom du kan sluta med att bryta sql som skrivits senare.

-- change #1234
ALTER TABLE asdf ADD COLUMN MyNewID INT
GO

-- change #5678
ALTER TABLE asdf DROP COLUMN SomeOtherID
GO

För lagrade procedurer väljer vi en enda fil per sproc, och den använder formuläret släpp/skapa. Alla lagrade procedurer återskapas vid driftsättning. Nackdelen är att om en ändring gjordes utanför källkontrollen går ändringen förlorad. Samtidigt är det sant för vilken kod som helst, men din DBA'a måste vara medveten om detta. Detta stoppar verkligen människor utanför teamet att smutskasta med dina lagrade procedurer, eftersom deras ändringar går förlorade i en uppgradering.

Med Sql Server ser syntaxen ut så här:

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[usp_MyProc]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [usp_MyProc]
GO

CREATE PROCEDURE [usp_MyProc]
(
    @UserID INT
)
AS

SET NOCOUNT ON

-- stored procedure logic.

SET NOCOUNT OFF

GO  

Det enda som återstår att göra är att skriva ett verktygsprogram som sammanställer alla enskilda filer och skapar en ny fil med hela uppsättningen uppdateringar (som ett enda skript). Gör detta genom att först lägga till schemaändringarna och sedan upprepa katalogstrukturen och inkludera alla lagrade procedurfiler.

Som en fördel med att skripta allt blir du mycket bättre på att läsa och skriva SQL. Du kan också göra hela den här processen mer komplicerad, men detta är det grundläggande formatet för hur man källkontrollerar all sql utan någon speciell programvara.

tillägg:Rick har rätt i att du kommer att förlora behörigheter för lagrade procedurer med DROP/CREATE, så du kan behöva skriva ett annat skript för att återaktivera specifika behörigheter. Detta behörighetsskript skulle vara det sista att köra. Vår erfarenhet hittade fler problem med ALTER verser DROP/CREATE semantik. YMMV



  1. Ta bort ett databaspostkonto från en profil (SSMS)

  2. Jag måste skriva en mycket intressant fråga som beräknar nollvärden och rader med värden

  3. Räkna baserat på tillstånd i SQL Server

  4. Hur man ersätter en del av en sträng i SQL