Pergunta

Eu tenho uma consulta SQL Insert dentro de um processo armazenado, para inserir linhas em um servidor vinculado mesa.

Como o processo armazenado está sendo chamado em uma transação pai, esta instrução Insert tenta usar um DTC para inserir linhas no servidor vinculado.

Eu gostaria de evitar DTC de se envolver.

Existe alguma maneira de fazer isso (como uma dica) para que a instrução Insert SQL ignore o escopo transacional?

Foi útil?

Solução

Minha sugestão é que você armazene tudo o que deseja inserir em uma tabela intermediária e, quando o procedimento terminar, execute a inserção entre servidores.Que eu saiba, não há como ignorar a transação em que você está, uma vez dentro da execução do SProc.

Por outro lado, se você usar o namespace System.Transaction do .NET 2.0, poderá informar instruções específicas para não participarem de nenhuma transação de escopo pai.Isso exigiria que você escrevesse parte de sua lógica em código, em vez de procedimentos armazenados, mas funcionaria.

Aqui está um link relevante.

Boa sorte, Alan.

Outras dicas

Tente usar o OpenQuery para ligar para a consulta do servidor vinculada/SP em vez de chamadas diretas que funcionaram para mim

Então, em vez de inserir ...selecione * em mylinkedserver.pubs.dbo.authors

por exemplo.Declare @tsql varchar (8000), @var char (2) selecione @var = 'ca' selecione @TSQL = 'Selecione * FROM OpenQuery (myLinkedserver' '' Selecione * do pubs.dbo.authors where State = '' '' ' ' + @Var +' '' '' '' ')'

INSIRA DENTRO DE .....EXEC (@TSQL)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top