Ознаки
Якщо в плані 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, перелічених у розділі "Стосується".
Посилання
Дізнайтеся про термінологію, яку корпорація Майкрософт використовує для опису оновлень програмного забезпечення.