Question

J'ai une requête d'insertion SQL dans un proc stocké, pour l'insertion de lignes dans une table de serveur lié .

Etant donné que le proc stocké est appelé dans une transaction parente, cette instruction Insert tente d'utiliser un DTC pour insérer des lignes dans le serveur lié.

Je souhaite éviter à DTC de s'impliquer.

Existe-t-il un moyen (par exemple, un conseil) pour que l'instruction Insert SQL ignore la portée transactionnelle?

Était-ce utile?

La solution

Je suggère que vous stockiez ce que vous voulez insérer dans une table de transfert, puis une fois la procédure terminée, lancez l'insertion entre serveurs. À ma connaissance, il n'y a aucun moyen d'ignorer la transaction dans laquelle vous vous trouvez une fois que vous êtes dans l'exécution de SProc.

En revanche, si vous utilisez l'espace de noms System.Transaction de .NET 2.0, vous pouvez indiquer à des instructions spécifiques de ne participer à aucune transaction d'étendue parent. Cela vous obligerait à écrire une partie de votre logique dans le code plutôt que dans les procédures stockées, mais cela fonctionnerait.

Voici un lien pertinent .

bonne chance, Alan.

Autres conseils

Essayez d'utiliser openquery pour appeler la requête / sp du serveur lié au lieu d'appeler directement Cela a fonctionné pour moi

donc au lieu de insérer dans ... select * from mylinkedserver.pubs.dbo.authors

par exemple. DECLARE @TSQL varchar (8000), @VAR char (2) SELECT @VAR = 'CA' SELECT @TSQL = 'SELECT * FROM OPENQUERY (MyLinkedServer,' 'SELECT * FROM pubs.dbo.authors WHERE state =' '' '' +'VAR + '' '' '' '') '

INSERT INTO .....       EXEC (@TSQL)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top