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.
E tabelas temporárias na SP, não ficaria mais rápido?
Abraços!
Caraca!
O SqlDataReader faz milagre éh?
Abs;
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.
O problema é que nem sempre isto é possível (Alguns DBA’s surtariam só de ouvir falar nisto).
Daí só resta apelar para as "alternativas", o Nilton Pinheiro fala sobre isto em http://www.mcdbabrasil.com.br/modules.php?name=News&file=article&sid=24.
Abraço,
Boas Cassiano,
Ela já estava fazendo uso de tabelas temporárias. 😐
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 !!