現象
SQL プランでインターリーブ実行が有効になっており、OPTION (OPTIMIZE FOR) 句を使用している場合、同じ SQL ステートメントで渡されたパラメーターを使用するテーブル値関数 (TVF) は、最初の実行で正しくない結果を返します。
解決方法
この問題は、SQL Serverの次の累積的な更新プログラムで修正されています。
SQL Server 2019 の累積的な更新プログラム 19
注 この累積的な更新プログラムをインストールした後にインターリーブ実行を使用しない例を次に示します。
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のバージョンの最新のビルドをインストールすることをお勧めします。
状態
マイクロソフトでは、この問題をこの資料の対象製品として記載されているマイクロソフト製品の問題として認識しています。
参照情報
マイクロソフトでソフトウェア更新プログラムの説明に使用する用語集を参照してください。