Comment configurer un environnement de développement pour les procédures stockées SQL Server?

J'ai récemment commencé à travailler sur une application héritée qui a la plupart de sa logique métier dans les procédures stockées réparties sur deux ou trois bases de données SQL Server. Actuellement, tout le code est également édité dans l'environnement en direct.

Comme je suis nouveau sur le code, je ne veux pas vraiment faire de changements dans l'environnement en direct et donc j'essaye de mettre en place un environnement de développement. Nous utilisons Visual Studio pour écrire tous les objects de la database et suivre ceux de Subversion. Avec cela, je peux ensuite configurer une instance de SQL Server pour travailler, mais un problème est que le code est plein de references codées en dur aux noms de server et de database, par exemple beaucoup de proc stockés ressemblent à ceci:

CREATE PROCEDURE server1.db1.dbo.proc1 AS INSERT INTO db1.dbo.table1 EXEC server2.db2.dbo.proc2 END 

Comment puis-je modifier toutes ces references de manière sûre? Jusqu'à présent, j'ai pensé à deux options:

1) Avoir un script qui exécute une search globale et replace les noms de server sur ma copy de travail subversion, puis exécuter ce code modifié par rapport à mes bases de données de test.

2) Configurer un alias DNS sur ma boîte locale en éditant mon file \ windows \ system32 \ drivers \ etc \ hosts qui redirige server1 et server2 vers les instances de développement des bases de données. Sur les servers de production, ceux-ci pointeraient alors vers les bases de données de production.

Lequel de ceux-ci est une meilleure configuration à votre avis? Voyez-vous des risques avec ou que j'ai négligés et qui devraient être pris en count?

Si toutes les references sont au server lié "Server2" etc alors vous pouvez spécifier un SQL Server sous-jacent différent sur votre boîte de dev pour ce server lié

Vous pouvez faire l'un de:

  • Utiliser sp_setnetname après la création
  • Définissez le @datasrc de sp_addlinkedserver lors de la création. Cela sépare le nom du server lié du nom du server réel

La solution correcte semble être de supprimer toutes les references codées en dur sur le server de production, si possible (votre solution 1). Il est inhabituel de partager une database de server entre les environnements de production et de développement (à less qu'il s'agisse d'une database séparée stockant par exemple uniquement des données statiques / de reference). Vous n'avez besoin du server que si vous travaillez sur plusieurs servers. Selon GBN, vous pouvez append sp_addlinkedserver

La route DNS Alias ​​est dangereuse. Si quelque chose échoue, vous allez mettre à jour datatables de production de votre environnement de développement.

Note latérale: Si vous avez access à un outil tel que Visual Studio DBPro, vous pouvez également utiliser des variables pour symboliser vos scripts, par exemple une table comme $ (SERVER). $ (DATABASE) .dbo.Table Lorsque le projet est déployé , les valeurs d'environnement appropriées sont substituées.