Sintomi
Supponiamo che tu usi un driver ODBC sqlncli11. dll per accedere a Microsoft SQL Server 2012 o SQL Server 2014 in un'applicazione. Quando si usa il cursore del server e la funzione SQLFetch/ SQLGetData per accedere a alcuni dati BLOB (Binary Large Object) in SQL Server, si verifica un problema di prestazioni soprattutto per i tipi di dati di grandi dimensioni, ad esempio varbinary (max) o varchar (max).
Causa
Si tratta di un problema di progettazione per l'implementazione della funzione SQLFetch/ SQLGetData nel driver ODBC di SQL Server 2012. Quando la query usa qualsiasi cursore del server, il driver ODBC richiama sp_cursorfetch durante l'implementazione di SQLFetch e il server invia tutti i BLOB al client. Quando viene eseguito SQLGetData , sp_cursor riporta di nuovo tutto il BLOB. Ciò influisce notevolmente sulle prestazioni per i tipi di dati di grandi dimensioni, ad esempio varbinary (max) o varchar (max).
Risoluzione
Informazioni sull'aggiornamento cumulativo
La nuova implementazione richiama sp_cursoroption per ottenere TEXTPTR_ONLY prima della sp_cursorfetche quindi richiama sp_cursoroption per riportarla in TextData prima della sp_cursor. In questo articolo è possibile migliorare le prestazioni. Il problema è stato risolto per la prima volta nel seguente aggiornamento cumulativo di SQL Server.
Ogni nuovo aggiornamento cumulativo per SQL Server contiene tutti gli hotfix e tutti gli aggiornamenti della sicurezza inclusi nell'aggiornamento cumulativo precedente. È consigliabile scaricare e installare gli aggiornamenti cumulativi più recenti per SQL Server:
Stato
Microsoft ha confermato che questo problema si verifica nei prodotti elencati nella sezione "Si applica a".