Sintomas
Assuma que utiliza um controlador ODBC sqlncli11.dll para aceder ao Microsoft SQL Server 2012 ou SQL Server 2014 numa aplicação. Quando utiliza o cursor do servidor e a função SQLFetch/ SQLGetData para aceder a alguns dados binários de objetos grandes (BLOB) no SQL Server, ocorre um problema de desempenho especialmente para grandes tipos de dados como varbinário (máx) ou varchar (máx).
Causa
Este é um problema de design para a implementação da função SQLFetch/ SQLGetData no controlador ODBC sql Server 2012. Quando a consulta utiliza quaisquer cursores de servidor, o controlador ODBC invoca sp_cursorfetch durante a implementação do SQLFetch, e o servidor envia todo o BLOB para o cliente. Em seguida, quando o SQLGetData é executado, sp_cursor traz de novo todo o BLOB. Isto afeta muito o desempenho de grandes tipos de dados como o varbinário (máx) ou o varchar (máx).
Resolução
Informação de atualização cumulativa
A nova implementação invoca sp_cursoroption para obter TEXTPTR_ONLY antes do sp_cursorfetch, invocando sp_cursoroption para a colocar de volta no TEXTDATA antes do sp_cursor. Isto pode melhorar o desempenho. O problema foi corrigido pela primeira vez na seguinte atualização cumulativa do SQL Server.
Cada nova atualização cumulativa do SQL Server contém todos os hotfixes e todas as correções de segurança que foram incluídas com a atualização cumulativa anterior. Recomendamos que descarregue e instale as últimas atualizações cumulativas para o SQL Server:
Estado
A Microsoft confirmou que este problema ocorre nos produtos da Microsoft listados na secção "Aplica-se a".