J'essaie de tester une proposition que l'un de nos fournisseurs nous a présentée pour accéder à sa base de données de produits et concernant les requêtes et les transactions qui couvrent plusieurs serveurs. Je n'ai jamais fait cela directement sur la base de données avant et pour être franc, je suis désemparé, alors j'essaye de faire une démonstration que cela fonctionne au moins conceptuellement.Comment puis-je utiliser des transactions couvrant des procédures chaînées sur plusieurs serveurs?
J'ai deux serveurs SQL Server 2005. Pour l'amour de l'argument, appelons-les Server1 et Server2 [maintenez vos applaudissements] chacun contenant une base de données factice. La base de données factice sur Serveur1 est appelée Source et celle sur Serveur2 est appelée Destination, juste pour garder les choses simples. Les bases de données occupent chacune une seule table appelée entrée et de sortie respectivement, de sorte que la structure est quasi expliqué comme ceci:
- Server1.Source.dbo.Input
- Server2.Destination.dbo.Output
J'ai une procédure stockée sur Server2 appelée WriteDataToOutput qui reçoit un seul argument Varchar et écrit son contenu dans la table de sortie.
Maintenant, la rouerie commence:
- Je veux créer une procédure stockée sur Server1.Source qui appelle la procédure stockée WriteDataToOutput définie sur Server2, ce qui semble être l'étape simple.
- Je souhaite que cet appel fasse partie d'une transaction afin que, si la procédure qui l'invoque échoue, la transaction entière soit annulée.
Et cela finit ma connaissance de ce qu'il faut faire. Est-ce que quelqu'un peut-il me montrer la bonne direction? J'ai essayé cela sur deux bases de données différentes sur le même serveur, et cela a très bien fonctionné, ce qui m'a amené à supposer que cela fonctionnera sur différents serveurs, la question est, comment puis-je faire une telle chose? Où est-ce que je commence?
+1 pour une question bien écrite –