現象
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 用の新しい累積的な更新プログラムには、以前のビルドであったすべての修正プログラムとセキュリティ修正プログラムが含まれます。 ご使用のバージョンの SQL Server 用の最新ビルドをインストールすることをお勧めします。
SQL Server 2019 の最新の累積的な更新プログラム
状態
Microsoft は、これが "適用対象" セクションに記載されている Microsoft 製品の問題であることを確認しました。
参考資料
マイクロソフトでソフトウェア更新プログラムの説明に使用する用語集を参照してください。