Проблема
Ошибка утверждения может возникать, если Microsoft SQL Server повторно выполняет хранимую процедуру, выполняющую следующее:
- Принимает в качестве аргумента большой объект, например varchar(max) или varbinary(max), и
- Создает временную таблицу, область которой ограничена выполнением процедуры, и
- Использует аргумент large object из временной таблицы.
В журнале ошибок SQL Server вы можете найти ошибку утверждения, похожую на следующую:
SPID функции даты и времени Ошибка: 17065, Серьезность: 16, Состояние: 1.
Date/Time SPID Утверждение SQL Server: File: FilePath\FileName, line = LineNumber Failed Assertion = 'fFalse' Попытка доступа к недействительному дескриптору большого двоичного объекта (1). Эта ошибка может быть связана со временем. Если ошибка сохраняется после повторного запуска инструкции, используйте DBCC CHECKDB для проверки базы данных на предмет структурной целостности или перезапустите сервер, чтобы убедиться, что структуры данных в памяти не повреждены.
SPID функции даты и времени Ошибка: 3624, Серьезность: 20, Состояние: 1.
SPID функции даты и времени Не удалось выполнить проверку утверждения системы. Дополнительные сведения см. в журнале ошибок SQL Server. Как правило, сбой утверждения вызван ошибкой программного обеспечения или повреждением данных. Чтобы выполнить проверку на наличие повреждений базы данных, рассмотрите возможность запуска DBCC CHECKDB. Если вы согласились отправлять дампы в Microsoft во время установки, мини-дамп будет отправлен в Microsoft. Обновление может быть доступно от корпорации Майкрософт в последнем пакете обновления или в исправлении от службы технической поддержки.
Причина
Внутренняя логика SQL Server отключает кэширование запросов, ссылающихся на большие объекты, чтобы последующие выполнения не ссылались на эти бизнес-объекты (которые были созданы во время предыдущих запусков и, следовательно, являются недопустимыми для последующих запусков). Эта логика не обрабатывала случай отложенного разрешения имен (DNR) во временных таблицах, которые приводили к кэшированию этих планов. Создание временных таблиц с заданной областью работы требует больших затрат, и SQL Server кэширует их для повторного использования при последующих выполнениях. Это предотвращает перекомпиляцию таких запросов из-за изменений схемы.
Узнайте больше о отложенном разрешении имен.
Решение
Эта проблема устранена в следующих накопительных обновлениях для SQL Server:
Накопительный пакет обновления 8 для SQL Server 2016 с пакетом обновления 1 (SP1)
Накопительный пакет обновления 4 для SQL Server 2017
Накопительный пакет обновления 10 для SQL Server 2014 с пакетом обновления 2 (SP2)
Сведения о накопительных обновлениях для SQL Server
Каждый новый накопительный пакет обновления для SQL Server содержит все исправления и исправления безопасности, которые были в предыдущей сборке. Ознакомьтесь с последним накопительным пакетом обновления для SQL Server.
Последний накопительный пакет обновления для SQL Server 2016
Последний накопительный пакет обновления для SQL Server 2017
последние накопительные пакеты обновления для SQL Server 2014
Состояние
Корпорация Майкрософт подтвердила, что это проблема продуктов Microsoft, перечисленных в разделе «Относится к».
Ссылки
Узнайте о терминологии , используемой корпорацией Майкрософт для описания обновлений программного обеспечения.