Trabalhando com uma transação em várias conexões

Pode se tratar de uma feature deprecated (não existirá em edições futuras SQL Server), mas é bem útil quando você necessita em várias conexões (ou seções) compartilhar objetos/registros que estão com lock exclusivo por uma transação, ou iniciar uma transação em uma aplicação e concluir em outra aplicação.

A primeira procedure para esta solução é a sp_getbindtoken, que permite recuperar o token da sessão.

A segunda procedure é a sp_bindsession, permite em outra conexão utilizar o token recuperado da transação, para juntar as duas seções.

Para um exemplo simples, temos a seção 53, iniciando uma transação. Nesta transação, criamos uma tabela com dois registros, por fim, recuperamos o Token da sessão:

DECLARE @bind_token varchar(255)

BEGIN TRAN

CREATE TABLE T (
	ID INT
)

INSERT INTO T
VALUES (1),(2),(3)

EXEC sp_getbindtoken @bind_token OUTPUT

SELECT @bind_token

Numa nova seção (56), juntamos esta à seção 53 por meio do Token, para acessarmos a tabela criada na transação. E por fim damos ROLLBACK na transação iniciada na seção 53, por meio desta nova seção.

EXEC sp_bindsession 'c86>CI;@aAK;SNG1-3^@Y]5---/gG---'
GO

SELECT * FROM T

ROLLBACK

Mas é com pesar que perderemos esta feature nas futuras edições do SQL Server.

Agradecimentos ao Darlan O. da Luz pelo desafio.

Anúncios

Um pensamento sobre “Trabalhando com uma transação em várias conexões

  1. Massa esta realmente poucos sabem.
    Ruim que quando vc usa MSDTC com WCF ele deveria fazer automático no SQL server.
    Agora usando isto não vou ter mais este tipo de problema!!

    Quanto a estar deprecated em novas versões deve vir com outra sp.

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s