Quando utilizar NOLOCK e READPAST no SqlServer.
Postado em : 25/09/2019
Ambas as instruções evitam o bloqueio de registros durante uma transação no SqlServer, porem trazendo dados incorretos, suas maneiras de fazer isso são muito diferentes, vamos entender agora seu funcionamento e diferenças.
Exemplo de uma transação
USE TesteDB GO BEGIN TRANSACTION T1 DELETE FROM TabelaTeste WHERE ID=1 UPDATE TabelaTeste SET valor= 'D' WHERE valor='C' INSERT INTO TabelaTeste (ID, valor) VALUES (4,'E') , (5, 'F') GO WAITFOR DELAY '00:00:05' -- Transação pode ser finalizada com o comando COMMIT para gravar os dados ou ROLLBACK onde descartamos as alterações ROLLBACK
NOLOCK
Durante uma transação este comando traz os dados alterados antes mesmo de serem gravados (COMMIT
) no banco, o principal problema esta no fato de lermos um dado alterado e não gravado, caso o usuário reverta a operação com um ROLLBACK
, os dados exibidos jamais existiram.
Exemplo
SELECT * FROM TabelaTeste WITH (NOLOCK)
READPAST
Já neste caso, os dados que estão sendo alterado não retornam na consulta, também temos um efeito desagradável, pois, o usuário da vai ver alguns dados, estes dados estarão disponíveis somente depois da operação de COMMIT
já alterados ou depois de ROLLBACK
em sua forma original.
Exemplo
SELECT * FROM TabelaTeste WITH (READPAST)
Links Relacionados
- Aula 11 - Acessando Banco de Dados SQL SERVER - Criando Consultas em sua aplicação em Asp.Net MVC 4 com C#(CSharp)
- Aula 12 - MS SQL Server - Comandos SQL e Stored Procedures em sua aplicação em Asp.Net MVC 4 com C#(CSharp)
- Aula 15 - Download das ferramentas necessárias para o nosso curso de Asp.Net MVC 4 com C#(CSharp)
- Aula 16 - Criando o banco de dados e configurando o SQLServer para nosso curso de Asp.Net MVC 4 com C#(CSharp)
- Aula 17 - Criando o banco de dados e configurando o SQLServer EXPRESS para nosso curso de Asp.Net MVC 4 com C#(CSharp)
- Classe para fazer Conexão MS SqlServer em C#(CSharp)
- Comando NULLIF no SQLServer.
- Consulta SQLServer com paginação
- Criando Tabelas Temporarias em MS-SqlServer
- Curso Instalando e configurando o MS SQL Server Express 2014 e Management Studio 2014
- DELETE CASCADE no SqlServer
- Desvendando o Poder da Função STRING_AGG no SQL Server para concatenação de dados
- DROP TABLE IF EXISTS no SQL Server.
- Exemplo de acesso a dados com SQL Server em C#.
- Exemplo de consulta em SqlServer para encontrar uma chave Estrangeira
- Exemplo de Stored Procedure com tratamento de erros e transação. (SqlServer)
- Exemplos de Stored Procedure SQL Server
- Explorando Tipos de Dados Personalizados no SqlServer: Utilidade e Impacto na Performance
- Extensões para DataReader, tratando valores de suas consultas SQL (DataReaderExtensions) C#(CSharp)
- Fazendo a paginação de consultas em MySQL com o comando Limit e Offset
- Formatando datas SqlServer
- Função para gerar tabela com listagem contendo intervalo entre duas datas. (SqlServer)
- MS SQL Server Express 2014 e Management Studio 2014 - Download e Intalação
- Não consigo apagar um Banco de dados (can not drop database) - MS-SQL Server.
- Restaurando um Banco de dados quando este fica travado informando estar restaurando, MS-SQL Server.
- Rodando Script MS-SQL Server diretamente pela linha de comando
- Salvando CSV com cabeçalho no SQL Server Management Studio
- Trabalhando com Cursores em MS-SQL Server.
- Tratando colunas nulas em sua Query SqlServer
- Update/Delete com INNER em MS-SQL Server
- Validando Valores nulos vindos de nosso Banco de Dados C#(CSharp)