Symptomy
Załóżmy, że za pomocą sterownika ODBC SQLNCLI11. dll można uzyskać dostęp do programu Microsoft SQL Server 2012 lub SQL Server 2014 w aplikacji. W przypadku użycia kursora serwera i funkcji SQLFetch/ SQLGetData w celu uzyskania dostępu do danych dużych obiektów binarnych (BLOB) w programie SQL Server występuje problem z wydajnością, szczególnie w przypadku dużych typów danych, takich jak varbinary (max) lub varchar (max).
Przyczyna
Jest to problem projektu dotyczący implementacji funkcji SQLFetch/ SQLGetData w sterowniku ODBC programu SQL Server 2012. Gdy kwerenda używa żadnych kursorów serwera, sterownik ODBC wywoła sp_cursorfetch podczas implementacji SQLFetch , a serwer wysyła do klienta cały obiekt BLOB. Następnie, gdy SQLGetData jest wykonywane, sp_cursor ponownie przełączy cały obiekt BLOB. Ma to znaczny wpływ na wydajność dużych typów danych, takich jak varbinary (max) lub varchar (max).
Rozwiązanie
Informacje o aktualizacji zbiorczej
Nowa implementacja wywoła sp_cursoroption , aby uzyskać TEXTPTR_ONLY przed sp_cursorfetch, a następnie wywoła sp_cursoroption , aby ponownie TextData przed sp_cursor. Może to zwiększyć wydajność. Ten problem został po raz pierwszy rozwiązany w poniższej zbiorczej aktualizacji programu SQL Server.
Każda nowa Zbiorcza aktualizacja programu SQL Server zawiera wszystkie poprawki i wszystkie poprawki zabezpieczeń uwzględnione w poprzedniej aktualizacji zbiorczej. Zalecamy pobranie i zainstalowanie najnowszych aktualizacji zbiorczych programu SQL Server:
Stan
Firma Microsoft potwierdziła, że jest to problem występujący w produktach firmy Microsoft wymienionych w sekcji "dotyczy".