Pregunta

Tengo una consulta de inserción SQL dentro de un proceso almacenado, para insertar filas en un servidor vinculado mesa.

Dado que el proceso almacenado se llama dentro de una transacción principal, esta instrucción Insert intenta utilizar un DTC para insertar filas en el servidor vinculado.

Me gustaría evitar DTC se involucre.

¿Hay alguna manera de hacer eso (como una pista) para que la instrucción Insertar SQL ignore el alcance transaccional?

¿Fue útil?

Solución

Mi sugerencia es que almacene todo lo que desee insertar en una tabla provisional y, una vez finalizado el procedimiento, ejecute la inserción entre servidores.Que yo sepa, no hay forma de ignorar la transacción en la que se encuentra una vez que se encuentra dentro de la ejecución de SProc.

Por el contrario, si utiliza el espacio de nombres System.Transaction de .NET 2.0, puede indicar a declaraciones específicas que no participen en ninguna transacción de ámbito principal.Esto requeriría que escribiera parte de su lógica en código en lugar de procedimientos almacenados, pero funcionaría.

Aquí está un enlace relevante.

Buena suerte, Alan.

Otros consejos

Intente usar OpenQuery para llamar a la consulta del servidor vinculada/SP en lugar de llamadas directas que funcionó para mí

Entonces, en lugar de insertar en ...seleccione * de mylinkedserver.pubs.dbo.authors

p.ej.Declarar @tsql varchar (8000), @var char (2) select @Var = 'CA' select @tsql = 'select * de OpenQuery (MyLinkedServer,' 'Seleccionar * de pubs.dbo.authors Where state =' '' ' ' + @Var +' '' '' '') '

INSERTAR EN .....EJECUTIVO (@TSQL)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top