Filtro para dados uncommitted no SQL Server
- Escrito por Miguel Domiciano Vieira
- Publicado em Tutoriais Apache Hop
- Hits: 129

Problema:
Durante transforms de output, como Insert/Update para o SQL Server, mesmo com o commit size definido em 1000 as consultas SELECT no SQL Server retornam dados fora da escala, não informando os dados de 1000 em 1000, assim como definido no commit size, exibindo dados que ainda não foram confirmados.
Garantindo que o autocommit está desativado
Em Metadata->Database Connection
selecione sua conexão com o SQL Server
nas configurações da conexão, clique em Advanced no campo "The SQL statements to run after connecting (; separated)" coloque o comando:
SET IMPLICIT_TRANSACTIONS ON
Assim, sempre que o Apache Hop iniciar uma nova sessão com o SQL Server, o auto commit será desativado
Habilitar filtro de uncommitted no SQL Server
Para filtrar dados não confirmados (uncommitted) no SELECT, é necessário habilitar o isolamento por snapshot no SQL Server.
Execute o comando no banco desejado:
ALTER DATABASE nomedatabase
SET ALLOW_SNAPSHOT_ISOLATION ON;
Isso permite que o banco de dados utilize isolamento por snapshot.
Filtro por sessão ou configuração padrão
Por sessão
Você pode configurar o nível de isolamento da transação da sessão, sempre que for fazer um SELECT no SQL Server antes execute o comando:
SET TRANSACTION ISOLATION LEVEL SNAPSHOT;
Configuração padrão
Você pode também habilitar o comportamento de snapshot como padrão para o isolamento de transações, executando no SQL Sever o comando:
ALTER DATABASE nomedatabase
SET READ_COMMITTED_SNAPSHOT ON;
Assim todas as transações que usam o nível de isolamento read committed se comportam como snapshot , filtrando dados uncommitted.
Resultado final
Após aplicar os passos anteriores, o SELECT no SQL Server passa a filtrar os dados não confirmados (uncommitted).