Ознаки
Якщо в плані SQL активовано міжзбережене виконання та використовується речення OPTION (OPTIMIZE FOR), функція TVF, яка використовує параметр, переданий в тій самій інструкції SQL, дає неправильні результати під час першого запуску.
Спосіб вирішення
Цю проблему вирішено в сукупному пакеті оновлень для SQL Server:
Сукупний пакет оновлень 19 для SQL Server 2019 р.
Примітка. Ось приклад того, що після інсталяції цього сукупного оновлення не використовується взаємозбережене виконання:
DECLARE @start smalldatetime SELECT count(*) FROM dbo.GetData(@start) OPTION (OPTIMIZE FOR (@start = '2022-05-23T06:00:00')) CREATE FUNCTION [dbo].[GetData] ( @start datetime ) RETURNS TABLE AS RETURN SELECT t.id FROM dbo.TestTable t WHERE t.testdate >= @start GO CREATE TABLE [dbo].[TestTable]( [id] [int] IDENTITY(1,1) NOT NULL, [testdate] [datetime] NULL ) ON [PRIMARY] GO
Кожен новий сукупний пакет оновлень для SQL Server містить усі виправлення та виправлення системи безпеки, які були в попередній збірці. Радимо інсталювати найновішу збірку для своєї версії SQL Server.
Стан
Корпорація Майкрософт підтвердила, що це проблема в продуктах Microsoft, перелічених у розділі "Стосується".
Посилання
Дізнайтеся про термінологію, яку корпорація Майкрософт використовує для опису оновлень програмного забезпечення.