sql >> Database >  >> RDS >> Sqlserver

Opgeslagen procedures/DB-schema in broncodebeheer

We kiezen ervoor om alles te scripten, en dat geldt ook voor alle opgeslagen procedures en schemawijzigingen. Er zijn geen wysiwyg-tools en geen fancy 'sync'-programma's nodig.

Schemawijzigingen zijn eenvoudig, u hoeft alleen maar één bestand voor die versie te maken en te onderhouden, inclusief alle schema- en gegevenswijzigingen. Dit wordt uw conversiescript van versie x naar x+1. U kunt het dan uitvoeren tegen een productieback-up en die integreren in uw 'dagelijkse build' om te controleren of het foutloos werkt. Houd er rekening mee dat het belangrijk is om al geschreven schema / data loading sql niet te wijzigen of te verwijderen, omdat u eventuele later geschreven sql kunt verbreken.

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

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

Voor opgeslagen procedures kiezen we voor één bestand per sproc, en het gebruikt het drop/create-formulier. Alle opgeslagen procedures worden opnieuw gemaakt bij de implementatie. Het nadeel is dat als een wijziging buiten de broncontrole is uitgevoerd, de wijziging verloren gaat. Tegelijkertijd geldt dat voor elke code, maar uw DBA moet hiervan op de hoogte zijn. Dit voorkomt echt dat mensen buiten het team gaan rommelen met uw opgeslagen procedures, omdat hun wijzigingen verloren gaan bij een upgrade.

Bij gebruik van SQL Server ziet de syntaxis er als volgt uit:

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  

Het enige dat u nog hoeft te doen, is een hulpprogramma schrijven dat alle afzonderlijke bestanden verzamelt en een nieuw bestand maakt met de volledige set updates (als een enkel script). Doe dit door eerst de schemawijzigingen toe te voegen en vervolgens de directorystructuur te herhalen en alle opgeslagen procedurebestanden op te nemen.

Als een voordeel van het scripten van alles, zul je veel beter worden in het lezen en schrijven van SQL. Je kunt dit hele proces ook uitgebreider maken, maar dit is het basisformaat voor het sourcen van alle sql zonder speciale software.

addendum:Rick heeft gelijk dat je permissies verliest voor opgeslagen procedures met DROP/CREATE, dus het kan zijn dat je een ander script moet schrijven om specifieke permissies weer in te schakelen. Dit toestemmingsscript zou het laatste zijn dat wordt uitgevoerd. Onze ervaring vond meer problemen met de semantiek van ALTER-verzen DROP/CREATE. YMMV



  1. De beste manier om veilig verbinding te maken met MySQL met PHP

  2. Het automatiseren van de tabellarische modelverwerking van Analysis Services (SSAS)-databases in SQL Server

  3. Overwegingen rond kolomvolgorde in indexen en sorteringen

  4. Voorwaardelijke WHERE-clausule met CASE-instructie in Oracle