Uma alternativa aos cursores


Uma funcionalidade que existe no SQL Server é a capacidade de iterar pelos resultados de uma consulta através de cursores. Não sou especialista em SQL Server, mas sei que a sua utilização degrada consideravelmente a performance. Talvez se utilizá-lo em uma quantidade pequena de informações, ele pode executar bem, mas não sei ao o impacto que isso causa, devido aos recursos do sistema que ele utiliza para fazer funcionar.

Como havia a necessidade de melhorar o resultado de um relatório extremamente complexo, e as alternativas em T-SQL já estavam esgotadas, a solução foi recriar a Stored Procedure utilizando o .NET. Sustituimos os cursores por SqlDataReaders, e a diferença foi bastante significativa. E ainda nem precisei abrir mão da segurança, já que o Assembly com a Stored Procedure gerenciada, foi catalogado com o nível de segurança definido como Safe.

Anúncios

6 comentários sobre “Uma alternativa aos cursores

    • Boas Raphael,

      Ao utilizar uma linguagem genuína, como o C#/VB.NET, você tem bem mais flexibilidade do que utilizar uma linguagem de banco.

      Em alguns cenários, pode não ser a melhor saída. Neste caso, mesmo com todo o overhead de ter uma SP gerenciada, o ganho foi muito alto.

    • Opa Israel, vira e mexe estou utilizando seus posts como referência para estudo.
      Com relação aos cursores realmente não não para usar e em alguns ambientes os DBAs simplesmente proibem hehehe O que costumo utilizar é criar não uma tabela temporária mas sim uma variável do tipo TABLE e aí sim fazer um WHILE nos registros desta variável. Grande abraço !!

Deixe uma resposta

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