8
votes

Modifications de la version pour les procédures stockées

J'ai une application qui repose très fortement sur les procédures stockées (SQL 2005/2008). Nous effectuons une mise à jour mineure qui modifiera 25 à 35 de ces procédures stockées. L'application est telle que les deux versions de la procédure stockée doivent être disponibles.

C'est la version principale 4 de l'application et nous avons généralement été en mesure de modifier complètement la structure de données à accéder à chaque nouvelle version. Cependant, dans ce cas, nous ne pouvons pas faire cela.

Voici mes 2 options que j'ai proposées avec

  1. marque une version "2" de chaque procédure stockée. Si j'avais une procédure appelée GetUtiliser créer un getUser2. L'inconvénient est que le nombre de procédures stockées augmentera de manière exponentielle avec chaque version change

  2. ajoutez un paramètre @version à chaque procédure stockée par défaut sur V1. Cela garderait le nombre de procédures stockées, mais bloquait à chaque procédure stockée

    Quelqu'un a-t-il des pensées à ce sujet? Toute autre idée intelligente?

    Cody


1 commentaires

+1 Les réponses à cette question m'aideront également dans un projet.


7 Réponses :


1
votes

Je ne créerais pas deux fichiers différents qui sont sûrs.

Peut-être dans votre commande source, vous devez créer une branche de toutes vos versions, puis une nouvelle succursale avec votre version suivante, vous pouvez inclure les deux branches comme des dossiers distincts de votre système et que votre logique commerciale a signalé emplacement correct.

Cette solution peut être un peu négligée, mais je pense que c'est le moindre de plusieurs maux.

Quoi qu'il en soit, en réalité, votre code de procédure stocké est un must définitif à mon avis.


0 commentaires

1
votes

Je suggérerais la deuxième option que vous avez fournie. Utilisez un paramètre de version. C'est ce que les services Web ne cassent donc pas le code des applications qui ont commencé à utiliser l'API il y a longtemps, mais l'API est mise à jour à un moment donné.

Je parie qu'il y a une logique qui est la même entre les deux versions que vous pourriez abstrayer au bas de la procréation ou quelque chose. Ou créer des fonctions potentiellement des éléments communs et appelez ces fonctions dans vos grands blocs si / swtich.


0 commentaires

5
votes

Je saisirais cette occasion pour passer à des procédures stockées à une orje ou à une autre approche. Les deux solutions proposées nécessiteraient une sorte de changement de code pour décider quelle procédure stockée à utiliser. Au lieu de cela, je déciderais de décider d'utiliser les procédures stockées ou l'orj. Je préparerais également des plans pour éliminer la plupart des procédures stockées.

J'ai vu beaucoup de mauvais code et des systèmes en désordre dans ma carrière, mais rien ne tire mes espoirs qu'un projet peut être récupéré comme voir getItemfromLots_2_temp_2 dans la liste de procédures stockées. Les multiples méthodes sont de manière plus jolie et plus facile à entretenir que plusieurs procédures stockées.

(aux autres qui aiment les procédures stockées. Je ne dis pas qu'ils sont mauvais. Je suis sûr qu'il y a des approches intelligentes pour manipuler ce type de chose à l'aide de procédures stockées, mais si une telle approche était utilisée, cette question n'aurait pas été posé.)


0 commentaires

2
votes

Modifier les procédures stockées existantes de sorte que la nouvelle logique soit exécutée sous condition de conditionnellement, uniquement lorsque la procédure est appelée sous ces circonstances où la nouvelle logique devrait être exécutée ... Si le nouveau procédé aurait une interface légèrement différente (ensemble de SproC Paramètres) Ensuite, vous pouvez les faire facultatif et utiliser la présence ou l'absence du paramètre un commutateur pour contrôler quels chunkl de code sont exécutés dans la ...

Lorsque l'ancienne logique n'est plus nécessaire, vous pouvez simplement le retirer des Sprates


0 commentaires

0
votes

J'irais pour les deux fichiers option pour les deux raisons suivantes:

  • La signature, c'est-à-dire que le nombre de paramètres peut changer entre versions
  • Chaque procédure stockée serait plus simple, donc moins de chances d'erreurs de tout code conditionnel

0 commentaires

0
votes

Nous utilisions de manière approfondie des procédures stockées dans ma société, mais nous avons (principalement) les éloignés de leur orme en retard.

Nous les utilisons toujours et nos versions sont les mêmes que c'était la même chose que c'était avant: chaque fois que nous modifions les procédures stockées qui restent (que seules quelques personnes ont des droits à faire), nous enregistrons le SQL OFF et stockons le SQL. fichier .SQL dans notre contrôle de version.

C'est imparfait et nous perdons beaucoup de l'intégration que nous avons entre le contrôle de la source et nos fichiers de code (car il n'y a pas d'intégration SQL Server dans TFS), mais c'est mieux qu'aucun contrôle de la source du tout.

Edit - et, bien sûr, cela ne fonctionne que si vous n'avez plus besoin d'utiliser l'ancienne version de la Proc stockée, car elle n'existera plus sur un formulaire runnable.


0 commentaires

0
votes

Une autre approche intéressante serait de stocker tout le code de vos procédures stockées dans une table de base de données, ainsi que la version du code. Ensuite, vous avez une «extrémité frontale» qui traite des demandes, puis, en fonction de la version, créera de manière dynamique un processus et l'exécutera. Il peut alors laisser tomber le proc puis fait.

Juste une suggestion du mur, mais peut travailler pour vous.


2 commentaires

Cela semble terriblement convolué ... ne serait-il pas plus simple?


Ouais ... mais l'affiche a dit qu'il cherchait dehors des idées de la boîte ... Je ne le ferais jamais de cette façon Fwiw.