Vi vælger at scripte alt, og det inkluderer alle lagrede procedurer og skemaændringer. Ingen wysiwyg-værktøjer og ingen smarte 'synkroniserings'-programmer er nødvendige.
Skemaændringer er nemme, alt du skal gøre er at oprette og vedligeholde en enkelt fil for den version, inklusive alle skema- og dataændringer. Dette bliver dit konverteringsscript fra version x til x+1. Du kan derefter køre den mod en produktionssikkerhedskopiering og integrere den i din 'daglige build' for at bekræfte, at den fungerer uden fejl. Bemærk, at det er vigtigt ikke at ændre eller slette allerede skrevet skema / dataindlæsning sql, da du kan ende med at bryde enhver sql skrevet senere.
-- change #1234
ALTER TABLE asdf ADD COLUMN MyNewID INT
GO
-- change #5678
ALTER TABLE asdf DROP COLUMN SomeOtherID
GO
For lagrede procedurer vælger vi en enkelt fil pr. sproc, og den bruger drop/create-formularen. Alle lagrede procedurer genskabes ved implementering. Ulempen er, at hvis en ændring blev udført uden for kildekontrol, går ændringen tabt. Samtidig gælder det for enhver kode, men din DBA'a skal være opmærksom på dette. Dette stopper virkelig folk uden for teamet i at tude med dine lagrede procedurer, da deres ændringer går tabt i en opgradering.
Ved brug af SQL Server ser syntaksen sådan ud:
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 eneste, der er tilbage at gøre, er at skrive et hjælpeprogram, der samler alle de enkelte filer og opretter en ny fil med hele opdateringssættet (som et enkelt script). Gør dette ved først at tilføje skemaændringerne og derefter gentage mappestrukturen og inkludere alle de lagrede procedurefiler.
Som en fordel ved at scripte alt, bliver du meget bedre til at læse og skrive SQL. Du kan også gøre hele denne proces mere kompliceret, men dette er det grundlæggende format for, hvordan man kildestyrer al sql uden nogen speciel software.
tilføjelse:Rick har ret i, at du vil miste tilladelser til lagrede procedurer med DROP/CREATE, så du skal muligvis skrive et andet script for at genaktivere specifikke tilladelser. Dette tilladelsesscript ville være det sidste til at køre. Vores erfaring fandt flere problemer med ALTER vers DROP/CREATE semantik. YMMV