MSDTC sur le serveur " server n'est pas disponible

J'obtiens cette erreur bizarre sur SQL Server. Et je ne trouve pas de solution dans les messages plus anciens.

J'ai cette procédure:

create proc _upJM_SyncAll_test
as
begin
    DECLARE @SQLString nvarchar(max)

set @SQLString = N'
DELETE FROM OPENQUERY([LOCAL_MYSQL],''SELECT acSubject FROM _utjm_setitemprices'') where acSubject not in (select acSubject from _uvJM_SetSubj)
DELETE FROM OPENQUERY([LOCAL_MYSQL],''SELECT acSubject FROM _utjm_setsubj'') where acSubject not in (select acSubject from _uvJM_SetSubj)

update a
set acName2 = b.acName2,
    acName3 = b.acName3,
    acAddress = b.acAddress,
    acPost = b.acPost,
    acPostName = b.acPostName, 
    acCountry = b.acCountry, 
    acVATCodePrefix = b.acVATCodePrefix,
    acCode = b.acCode, 
    anDaysForPayment = b.anDaysForPayment
from OPENQUERY([LOCAL_MYSQL],''SELECT * FROM _utjm_setsubj'') a join _uvJM_SetSubj b on (a.acSubject = b.acSubject)
where 1=1
and (   isnull(a.acName2,'''') <> isnull(b.acName2,'''') OR 
        isnull(a.acName3,'''') <> isnull(b.acName3,'''') OR 
        isnull(a.acAddress,'''') <> isnull(b.acAddress,'''') OR 
        isnull(a.acPost,'''') <> isnull(b.acPost,'''') OR 
        isnull(a.acPostName,'''') <> isnull(b.acPostName,'''') OR 
        isnull(a.acCountry,'''') <> isnull(b.acCountry,'''') OR 
        isnull(a.acVATCodePrefix,'''') <> isnull(b.acVATCodePrefix,'''') OR 
        isnull(a.acCode,'''') <> isnull(b.acCode,'''') OR 
        isnull(a.anDaysForPayment,'''') <> isnull(b.anDaysForPayment,'''')
)

insert into OPENQUERY([LOCAL_MYSQL],''SELECT * FROM _utjm_setsubj'') (acSubject, acName2, acName3, acAddress, acPost, acPostName, acCountry, acVATCodePrefix, acCode, anDaysForPayment)
select b.acSubject, b.acName2, b.acName3, b.acAddress, b.acPost, b.acPostName, b.acCountry, b.acVATCodePrefix, b.acCode, b.anDaysForPayment
from OPENQUERY([LOCAL_MYSQL],''SELECT * FROM _utjm_setsubj'') a right join _uvJM_SetSubj b on (a.acSubject = b.acSubject)
where a.acSubject is null '

EXECUTE sp_executesql @SQLString;
end

Quand je lance la procédure de gestion de studio comme ceci:

  exec dbo._upJM_SyncAll_test

tout est OK. Je n'obtiens pas d'erreur, la synchronisation fonctionne correctement.

Mais quand j'ai mis exécuter dans le déclencheur comme ceci:

create trigger _utrJM_SetSubj on tHE_SetSubj after insert, update, delete
as
begin
    exec dbo._upJM_SyncAll_test
end

J'obtiens cette erreur:

Msg 8501, Niveau 16, État 3, Procédure _upJM_SyncAll_test, la Ligne 54

MSDTC sur le serveur "serveur" n'est pas disponible.

Procédure _upJM_SyncAll_test a seulement 39 lignes...

  • Pourquoi êtes-vous à l'aide de SQL dynamique en premier lieu?, il ne me semble pas nécessaire
  • eh bien, c'est comme ça.. serveur lié [LOCAL_MYSQL] est en place et en cours d'exécution, mais il pourrait se passer qui est inaccessible. Dans ce cas, si sp_executesql renvoie l'erreur je fais autre chose.. s'il vous Plaît noter que _upJM_SyncAll_test est juste la procédure d'essai pour ce post, _upJM_SyncAll est plus complexe.
InformationsquelleAutor Kiki | 2015-04-02