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. P>
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. P>
Voici mes 2 options que j'ai proposées avec p>
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 p> li>
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 p> li> ol>
Quelqu'un a-t-il des pensées à ce sujet? Toute autre idée intelligente? P>
Cody p>
7 Réponses :
Je ne créerais pas deux fichiers différents qui sont sûrs. p>
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. p>
Cette solution peut être un peu négligée, mais je pense que c'est le moindre de plusieurs maux. p>
Quoi qu'il en soit, en réalité, votre code de procédure stocké est un must définitif à mon avis. P>
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é. P>
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. P>
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. P>
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 (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é.) p> getItemfromLots_2_temp_2 code> 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. P>
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 ... P>
Lorsque l'ancienne logique n'est plus nécessaire, vous pouvez simplement le retirer des Sprates P>
J'irais pour les deux fichiers option pour les deux raisons suivantes: p>
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. P>
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. P>
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. P>
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. P>
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. P>
Juste une suggestion du mur, mais peut travailler pour vous. P>
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.
+1 Les réponses à cette question m'aideront également dans un projet.