J'ai une procédure stockée qui fait référence à un serveur lié. À plusieurs endroits de la procédure, j'ai quelque chose comme ceci:
INSERT INTO [TableName]
(...Columns...)
SELECT ...Columns...
FROM [ServerName\InstanceName].[Catalogue].[dbo].[TableName]
WHERE TableNameID = @TableNameID
Cette procédure existe dans mon environnement de développement, mon environnement de test et mon environnement en direct.
Le problème est que chaque copie de la procédure est subtilement différente car les noms de serveur sont différents pour chaque environnement. Cela rend la gestion du déploiement des mises à jour de script difficile.
Existe-t-il un moyen de rendre la procédure portable afin que chaque environnement puisse en exécuter des versions identiques?
Sinon, puis-je faire quelque chose pour rendre le déploiement de scripts moins sujet aux erreurs / erreurs?
sql-server
sql-server-2008
stored-procedures
linked-server
Docteur Jones
la source
la source
SELECT <fields> FROM <linked server>
mais utiliser le même nom de vue sur tous les serveurs pour maintenir le code à jourRéponses:
Le nom de votre serveur lié ne doit pas nécessairement être le nom du serveur. Vous pouvez utiliser un nom générique.
Configurez le serveur lié sur chaque environnement avec le même nom, mais dirigez-le vers des serveurs différents.
la source
J'aime l'idée d'utiliser un nom de serveur lié générique. Cependant, dans de nombreux environnements, cela peut ne pas être possible. Dans ce cas, vous pouvez utiliser SQl dynamique dans votre sp.
la source