Je travaille sur un projet où nous parlons directement d'une base de données à une autre. Nous avons une base de données maîtresse dans laquelle le client met à jour son site Web, puis les modifications sont transférées d'une base de données à l'autre via de nombreux scripts SQL. La base de données master fonctionne comme un site de prévisualisation leur permettant de voir les changements avant de les pousser à vivre.Cross Database SQL Scripts
Actuellement, nous codons le nom de la base de données esclave directement dans les requêtes SQL.
par exemple. INSERT INTO [esclave-base de données] .dbo.TableName
Ceci est une douleur absolue cependant lors de la reprise du développement où nous aurons plusieurs ensembles de deux bases de données. Tous les proc mémorisés pertinents pour le développement en cours sont mis à jour pour pointer vers la base de données esclave pour cette branche particulière, par ex. [branche5-slave-database]. Ceci n'est pas idéal car les modifications doivent ensuite être modifiées manuellement lors de l'insertion dans le coffre (en changeant les noms de base de données codés en dur).
Y a-t-il une meilleure façon de procéder? La seule solution que je puisse voir pour le moment serait de créer une instance SQL Server pour chaque branche, ce qui signifierait que les noms de bases de données peuvent toujours rester identiques dans toutes les branches. Ce serait une douleur absolue et aurait un frais généraux. Est-il possible de définir une constante pour le nom de la base de données dans SQL Server? Nous permettant de mettre à jour une seule valeur sur les bases de données de la branche. Le SQL dynamique est hors de question.
La meilleure option que j'ai réussi à trouver est SQL Server 2005 Synonymes. Ils ne peuvent pas être utilisés au niveau de la base de données, j'en ai donc un pour chaque objet référencé entre les bases de données. Je vais ensuite écrire un script qui peut rapidement reconstruire les synonymes avec un nom de base de données différent. –