現象

User-Defined Transact-SQL で実装され、1 つのデータ値を返す UDF は、T-SQL Scalar User-Defined Functions (UDF) と呼ばれています。 

Microsoft SQL Server 2019 年には、UDF の実行が主なボトルネックである T-SQL スカラー UDF を呼び出すクエリのパフォーマンスを向上させるスカラー UDF のインリン化機能が導入されました。 T-SQL UDF インライン化は、インライン可能な UDF をリレーショナル式に自動的に変換します。 


この累積的な更新プログラムには、スカラー UDF の下線を使用するクエリがエラーまたは予期しない結果を返す可能性があるシナリオについて、次の領域に対していくつかの修正が含まれています。

  • UDF の戻り値の型が (2019 CU2 sql_variantに追加された) 場合、型の不一致エラー Microsoft SQL Serverします。

  • 2019 CU2 sp_executesqlから UDF 呼び出しを実行Microsoft SQL Server中止する

  • GOTO コマンドを関連付けずにラベルを参照する UDF は、正しくない結果を返します (Microsoft SQL Server 2019 CU2 に追加されました)

  • メモリ切れの状態とメモリ リークが発生する原因は、スカラー UDF が非常に大きかったためです (CU2 Microsoft SQL Server 2019 で追加)

  • 条件 (IF-ELSE) ステートメントで使用される初期化されていない変数では、エラーが発生します (2019 CU2 Microsoft SQL Server追加)

  • UDF に 2019 CU7 SQL_VARIANT パラメーターが含まれている場合の明示的Microsoft SQL Serverエラー

  • スカラー関数が CHECKSUM を参照するときに発生するエラー (2019 CU7 Microsoft SQL Serverに追加)

  • スカラー式の再評価数が多い UDF 呼び出しでは、(CU7 の 2019 年に追加された) 非利回りスケジューラ エラーが発生するMicrosoft SQL Server可能性があります。

  • UDF 参照クエリで OPTION (RECOMPILE) (2019 CU7 で追加) が使用Microsoft SQL Server発生するエラー

  • ビューがインライン UDF を呼び出すと発生するアクセス許可エラー (2019 CU9 Microsoft SQL Server追加)

  • XEvent を使用するときに発生するアクセス違反 (query_tsql_scalar_udf_inlined 2019 CU9 Microsoft SQL Server追加) 

  • スカラー UDF の inlining が "QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_n" クエリ ヒントを尊重していない (Microsoft SQL Server 2019 CU9 で追加された) による動作の不整合

  • UDF の下線には集計が含まれているので、スケジューラエラーが発生しない可能性があります (CU9 Microsoft SQL Server追加) 

  • 条件付きブロック内の同じ変数に対するスカラー操作のシーケンスによるメモリMicrosoft SQL Server 2019 CU9 で追加

  • アクセス違反は、CU9 へのアップグレード後に入力パラメーターとして使用されるスカラー インライン可能 UDF (UDF2) を含むスカラー インライン可能 UDF (UDF1) をオブジェクトが呼び出した場合に発生する可能性があります (Microsoft SQL Server 2019 CU11 で追加)。

  • UDF の下線を引く場合、次のエラー コード 6846、1011、107 でエラーが発生する可能性があります (Microsoft SQL Server 2019 CU11 で追加)


この累積的な更新プログラム は、次のシナリオの内線付けもブロックします。

  • UDF が特定の組み込み関数 (@@ROWCOUNT など) を参照している場合、インライン化すると結果が変更される可能性があります (Microsoft SQL Server 2019 CU2 で追加)

  • 集計関数がパラメーターとしてスカラー UDF に渡される場合 (2019 CU2 Microsoft SQL Server追加)

  • UDF が組み込みビュー (例: OBJECT_ID) を参照する場合 (2019 CU2 Microsoft SQL Server追加)

  • UDF で XML メソッドが使用されている場合 (2019 CU4 Microsoft SQL Server追加)

  • UDF に "TOP 1" (2019 CU4 で追加) なしの ORDER BY を含む SELECT が含Microsoft SQL Server場合

  • SELECT クエリが ORDER BY 句と組み合わせて割り当てを実行する場合 (例: SELECT @x = @x + 1 FROM テーブル ORDER BY column_name) (Microsoft SQL Server 2019 CU4 で追加)

  • UDF に複数の RETURN ステートメントが含まれている場合 (2019 CU5 Microsoft SQL Serverに追加)

  • UDF が RETURN ステートメントから呼び出された場合 (2019 CU5 Microsoft SQL Serverで追加)

  • UDF が関数を参照している場合 (STRING_AGG 2019 CU5 に追加Microsoft SQL Server)

  • UDF 定義がリモート テーブルを参照している場合 (2019 CU6 Microsoft SQL Server追加)

  • UDF 呼び出しクエリで GROUPING SETS、CUBE、または ROLLUP (2019 CU6 で追加Microsoft SQL Server場合)

  • UDF 呼び出しクエリに割り当て用の UDF パラメーターとして使用される変数が含まれている場合 (例: SELECT @y=2、@x=UDF(@y)) (Microsoft SQL Server 2019 CU6 で追加)

  • UDF が暗号化された列を参照する場合 (2019 CU11 Microsoft SQL Server追加)

  • UDF に 'WITH XMLNAMESPACES' への参照が含まれている場合 (2019 CU11 Microsoft SQL Server追加)

  • UDF を呼び出すクエリに共通テーブル式 (CCTEs) がある場合 (2019 CU11 Microsoft SQL Server追加)


Microsoft SQL Server 2019 CU2 にアップグレードした後、CU5 にアップグレードする前に、UDF が内線付けの対象であるかどうかを再評価する必要があります。 これを行うには、次のいずれかの方法を使用して、対象のスカラー UDF を更新します。

  • 該当sp_refreshsqlmodule UDF に対してコマンドを実行します (このシステム ストアド プロシージャの詳細については、sp_refreshsqlmodule (Transact-SQL)を参照してください)。

  • 既存の定義、アクセス許可、およびプロパティの設定を使用して、既存のスカラー UDF を変更または再作成します(ALTER FUNCTION (Transact-SQL) を参照してください)。

次のスクリプトは、既存のインライン スカラー UDF のメタデータを更新するスクリプトを生成します。

/*

すべてのアクティブなインライン可能スカラー UDF を更新するために使用できるスクリプトを生成します。

                このsp_refreshsqlmoduleアクセス許可、拡張プロパティには影響を与え、

または オブジェクトに関連付けられている SET オプション。

*/

SELECT 'EXECUTE sys.sp_refreshsqlmodule ''[' + OBJECT_SCHEMA_NAME(object_id) + +']'' + '[' + OBJECT_NAME(object_id)

+ ']'';'AS 'RefreshStatement'

FROM sys.sql_modules

WHERE is_inlineable = 1

AND inline_type = 1;

GO

 2019 CU5 Microsoft SQL Serverアップグレードすると、コンパイル中に再度 UDF インライン機能が自動的に派生します。

解決策

この問題は、次の累積的な更新プログラムで修正SQL Server。

SQL Serverの新しい累積的な更新プログラムには、すべての修正プログラムと、以前の累積的な更新プログラムに含まれているすべてのセキュリティ修正プログラムが含まれています。 最新の累積的な更新プログラムを確認SQL Server。

状態

マイクロソフトでは、この問題をこの資料の対象製品として記載されているマイクロソフト製品の問題として認識しています。

関連情報

マイクロソフトでソフトウェア更新プログラムの説明に使用する用語集を参照してください。

ヘルプを表示

スキルを磨く
トレーニングの探索
新機能を最初に入手
Microsoft Insider に参加する

この情報は役に立ちましたか?

翻訳品質にどの程度満足していますか?
どのような要因がお客様の操作性に影響しましたか?

フィードバックをお送りいただきありがとうございます!

×