Проблемы
Предположим, что вы используете драйвер ODBC для sqlncli11. dll для доступа к Microsoft SQL Server 2012 или SQL Server 2014 в приложении. При использовании серверного курсора и функции SQLFetch/ SQLGetData для доступа к данным больших двоичных объектов (BLOB) в SQL Server возникает проблема с производительностью, особенно для больших типов данных, таких как varbinary (max) или varchar (max).
Причина
Это проблема разработки для реализации функции SQLFetch/ SQLGetData в драйвере SQL Server 2012 ODBC. Если в запросе используются любые серверные курсоры, драйвер ODBC вызывает sp_cursorfetch во время реализации SQLFetch , а сервер отправляет клиенту весь блоб. Затем, когда SQLGetData выполняется, sp_cursor снова выводит все BLOB-объектов. Это значительно влияет на производительность для больших типов данных, таких как varbinary (max) или varchar (max).
Решение
Совокупные сведения об обновлениях
Новая реализация вызывает sp_cursoroption для получения TEXTPTR_ONLY перед sp_cursorfetch, а затем вызывает sp_cursoroption , чтобы вернуть его в TextData перед sp_cursor. Это может повысить производительность. Эта проблема впервые устранена в следующем накопительном обновлении SQL Server.
Все новые накопительные обновления для SQL Server содержат все исправления и все исправления для системы безопасности, которые были включены в предыдущий накопительный пакет обновления. Мы рекомендуем вам загрузить и установить последние накопительные обновления для SQL Server.
Статус
Корпорация Майкрософт подтверждает наличие этой проблемы в своих продуктах, которые перечислены в разделе "Применяется к".