Usuário com melhor resposta
Conexão entre servidores.

Pergunta
-
Por favor,
Tenho o seguinte cenário:
Windows Server 2003 com SQL 2000
Windows Server 2008 com SQL 2005
Os servidores estão dentro do mesmo domínio.
O banco principal está no SQL 2000, porém necessito fazer atualização em uma tabela específica no SQL 2005.
A solução que encontrei foi criar a seguinte trigger:
CREATE TRIGGER ILSAPPURCHASE
ON MOVIMENTO
FOR DELETE
AS
DECLARE @DOCENTRY int
BEGIN
SET XACT_ABORT ON
SET @DOCENTRY = (SELECT DOCENTRY FROM "SERVIDOR4".SBO_BANCO.dbo.PURCHASEORDER
WHERE DOCENTRY = (SELECT ID FROM DELETED))
IF (@DOCENTRY > 0)
BEGIN
UPDATE "SERVIDOR4".SBO_BANCO.dbo.PURCHASEORDER SET TransType = 'D' WHERE DOCENTRY = @DOCENTRY
END
END
GO
Para efetuar a conexão entre os servidores utilizei o comando:USE MASTER
EXEC sp_addlinkedserver @server='SERVIDOR4',
@srvproduct='',
@provider='SQLOLEDB',
@datasrc='SERVIDOR4'
Utilizei a documentação KB839279 para configuração do MSDTC.
Caso tire o comando da trigger SET XACT_ABORT ON, ocorre o erro:"Cannot start more transactions on this session" SQL SERVER LINKED SERVER
Se deixo o erro não ocorre, porém não funciona a atualização...
O que poderia estar ocorrendo?
O caminho que estou trilhando é o correto ou teria outra forma de fazer essa atualização?
Desde de já agradeço sugestões.
Pascoal.
Respostas
-
O SET XACT_ABORT ON é necessário para a transação distribuida.
E precisa ser colocado no inicio da Trigger, não consigo afirmar que o local que esse comando está no momento faz diferença. Eu já fi problemas dessa forma, mas existia um TSQL antes do XACT_ABORT.
Experimente coloca-lo mais acima, senão resolver coloque a mensagem de erro completa que você está recebendo, pois a que foi publicada é somente uma parte da mensagem de erro.
Alex Rosa, visite também http://www.keep-learning.com (Forum e Artigos interessantes)- Marcado como Resposta Richard Juhasz quinta-feira, 22 de dezembro de 2011 19:36
Todas as Respostas
-
O SET XACT_ABORT ON é necessário para a transação distribuida.
E precisa ser colocado no inicio da Trigger, não consigo afirmar que o local que esse comando está no momento faz diferença. Eu já fi problemas dessa forma, mas existia um TSQL antes do XACT_ABORT.
Experimente coloca-lo mais acima, senão resolver coloque a mensagem de erro completa que você está recebendo, pois a que foi publicada é somente uma parte da mensagem de erro.
Alex Rosa, visite também http://www.keep-learning.com (Forum e Artigos interessantes)- Marcado como Resposta Richard Juhasz quinta-feira, 22 de dezembro de 2011 19:36
-