Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Procédures stockées/schéma de base de données dans le contrôle de code source

Nous choisissons de tout scripter, et cela inclut toutes les procédures stockées et les modifications de schéma. Aucun outil wysiwyg et aucun programme de "synchronisation" fantaisiste ne sont nécessaires.

Les modifications de schéma sont faciles, tout ce que vous avez à faire est de créer et de gérer un seul fichier pour cette version, y compris toutes les modifications de schéma et de données. Cela devient votre script de conversion de la version x vers x+1. Vous pouvez ensuite l'exécuter sur une sauvegarde de production et l'intégrer dans votre "construction quotidienne" pour vérifier qu'elle fonctionne sans erreur. Notez qu'il est important de ne pas modifier ou supprimer le sql de chargement de schéma/données déjà écrit, car vous pourriez finir par casser tout sql écrit plus tard.

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

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

Pour les procédures stockées, nous choisissons un seul fichier par sproc, et il utilise le formulaire drop/create. Toutes les procédures stockées sont recréées lors du déploiement. L'inconvénient est que si une modification a été effectuée en dehors du contrôle de code source, la modification est perdue. En même temps, c'est vrai pour n'importe quel code, mais votre DBA'a doit en être conscient. Cela empêche vraiment les personnes extérieures à l'équipe de manipuler vos procédures stockées, car leurs modifications sont perdues lors d'une mise à niveau.

Avec Sql Server, la syntaxe ressemble à ceci :

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  

La seule chose qui reste à faire est d'écrire un programme utilitaire qui rassemble tous les fichiers individuels et crée un nouveau fichier avec l'ensemble des mises à jour (en un seul script). Pour ce faire, ajoutez d'abord les modifications de schéma, puis récurrez la structure de répertoires et incluez tous les fichiers de procédure stockée.

En tant qu'avantage de tout scripter, vous deviendrez bien meilleur en lecture et en écriture SQL. Vous pouvez également rendre tout ce processus plus élaboré, mais c'est le format de base pour contrôler la source de tous les SQL sans aucun logiciel spécial.

addendum :Rick a raison de dire que vous perdrez les autorisations sur les procédures stockées avec DROP/CREATE, vous devrez donc peut-être écrire un autre script pour réactiver des autorisations spécifiques. Ce script d'autorisation serait le dernier à s'exécuter. Notre expérience a trouvé plus de problèmes avec la sémantique ALTER versets DROP/CREATE. YMMV