Problema SQLNCLI de serveres enlazados. "Ninguna transacción está activa"

Estoy tratando de ejecutar un procedimiento almacenado y simplemente inserto sus resultados en una tabla temporal, y recibo el siguiente post:

La operación no se pudo realizar porque el proveedor OLE DB "SQLNCLI" para el server vinculado "MyServerName" no pudo comenzar una transacción distribuida. El proveedor OLE DB "SQLNCLI" para el server vinculado "MyServerName" ha devuelto el post "No hay transacción activa".

Mi consulta se ve así:

INSERT INTO #TABLE EXEC MyServerName.MyDatabase.dbo.MyStonetworkingProcedure Param1, Param2, Param3 

Número exacto de columna, nombres, el problema no es el resultado.

MSDTC está permitido y se inició en ambas computadoras, también llamada de procedimiento remoto.

Las máquinas no están en el mismo dominio, pero puedo ejecutar consultas remotas desde mi máquina y get el resultado. Incluso puedo ejecutar el procedimiento almacenado y ver sus resultados, simplemente no puedo insertlo en otra tabla.

¿Ayuda por favor? 🙂

EDITAR


Ah, olvidé mencionar, el procedimiento almacenado no dispara ningún disparador. Solo inserta loggings en tablas temporales que crea para el tratamiento de datos.

Bueno, después de seguir muchos tutoriales e investigar mucho al respecto, cambié toda la configuration que pensé que era necesaria para que funcionara, pero aún no lo hizo.

Hoy tuvimos que forzar un reinicio de energía en nuestro server de desarrollo debido a un no-break defectuoso, y cuando iniciamos el server, ¿adivinen qué? ¡Funciona!

Así que solo para el logging, modifiqué algunas configuraciones específicas de MSDTC, las agregué como server vinculado y permití RPC IN y OUT, y cambié la configuration de RPC para 'NO AUTENTICACIÓN REQUERIDA' o algo por el estilo.

Recuerdo haber leído en alguna parte que después de cambiar esta configuration, se requería un reinicio, aunque Windows dice que ya ha reiniciado el service.

Había reiniciado mi server como … dos veces desde que lo cambié, y todavía no funcionó. Pero como hoy, después de un apagado y encendido completo, ¡funciona!

En cuanto a la syntax, guardé lo mismo.

También debe verificar la resolución del nombre DNS en la configuration de la networking IP.

Por ejemplo, tiene un server llamado server-a.midominio.com y otro llamado server-b.otherdomain.com, inicie session en el server-a y haga un "ping server-b" (sin el dominio).

Si responde "La request de ping no pudo encontrar el server host-b. Verifique el nombre e inténtelo de nuevo". ese es el problema.

Vaya a Panel de control> Conexiones de networking> Haga clic con el button derecho en la tarjeta de networking> Propiedades> Protocolo de Internet> Propiedades> Avanzado> DNS> Agregue este sufijo DNS en order. Y aquí agregue el dominio local: mydomain.com y luego agregue el dominio remoto: otherdomain.com Haga clic en Aceptar hasta que salga

Ahora, si haces el "ping server-b" debería responder algo como:

Pinging server-b.otherdomain.com [192.168.1.2] con 32 bytes de datos: Respuesta de 192.168.1.2: bytes = 32 time = 12ms TTL = 64 Respuesta de 192.168.1.2: bytes = 32 time = 9ms TTL = 64

Ahora intenta nuevamente ejecutar la transacción distribuida.

¿Has probado usar openquery?

 insert into table select * from openquery(myservername, 'exec mydatabase.dbo.mystonetworkingproc param1, param2, param3')