使用 Microsoft 登入
登入或建立帳戶。
您好:
選取其他帳戶。
您有多個帳戶
選擇您要用來登入的帳戶。

徵兆

User-Defined 函數 (在 Transact-SQL 中實作且傳回單一數據值的 UDF) 稱為 T-SQL Scalar User-Defined 函數 (UDFs) 。 

Microsoft SQL Server 2019 推出 Scalar UDF Inlining 功能。 此功能可以改善呼叫 T-SQL Scalar UDFs 的查詢效能,其中 UDF 執行是主要瓶頸。 T-SQL Scalar UDF Inlining 會自動將內嵌 UDF 轉換成關係型表達式。 

針對使用 Scalar UDF Inlining 的查詢可能會傳回錯誤訊息或非預期的結果,此累積更新 (CU) 包含下列各區域的數個 修正

  • 如果UDF的傳回類型是 SQL Server 2019 CU2) 中新增的 sql_variant (,就會發生類型不相符的錯誤。

  • 從 SQL Server 2019 CU2) 新增的 UDFsp_executesql取消執行 (。

  • 參照標籤但不含相關聯 GOTO 命令的 UDF 會傳回 (在 SQL Server 2019 CU2) 中新增的錯誤結果。

  • 記憶體不足狀況和記憶體洩漏的發生原因是在 SQL Server 2019 CU2 () 中新增了非常大的刻度 UDFs) 。

  • 在條件 (IF-ELSE) 語句中使用的未初始化變數會造成錯誤 (新增至 SQL Server 2019 CU2) 。

  • 如果 UDF 在 SQL Server 2019 CU7) 中新增 sql_variant參數 (,就會發生明確轉換錯誤。

  • 如果在 SQL Server 2019 CU7) 中新增 CHECKSUM(的刻度函數參照,就會發生錯誤。

  • 在 SQL Server 2019 CU7) 中新增許多縮放運算式重新評估的 UDF 語句可能會導致非收益的排程器錯誤 (。

    注意:這個問題的修正程式有時可能會導致效能回歸。 若要降低此效能回歸,您可以開啟追蹤標幟 (TF) 13156 來停用原始修正程式。

    Microsoft 正著手修正此效能回歸問題,並在未來的 CU 中提供。

  • 如果 UDF 參照查詢使用在 SQL Server 2019 CU7) 中新增的 OPTION (RECOMPILE)(,就會發生錯誤。

  • 如果在 SQL Server 2019 CU9) 中新增了叫用內嵌 UDF 的檢視 (,就會發生許可權錯誤。

  • 如果使用query_tsql_scalar_udf_inlinedXEvent (在 SQL Server 2019 CU9) 中新增,就會發生違反存取權的情況。

  • 發生不一致的行為是因為 Scalar UDF Inlining 不尊重 SQL Server 2019 CU9) 中新增的 QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_n查詢提示 (。

  • 內嵌 UDF 包含匯總,可能會在 SQL Server 2019 CU9) 中新增 (可能導致非收益的排程器錯誤。

  • 因為在 SQL Server 2019 CU9) 中新增之條件區塊 (相同變數上,發生記憶體不足的錯誤。

  • 升級至 CU9 之後,如果物件叫用的縮放式無線 UDF (UDF1) 具有可縮放式 UDF (UDF2) 做為 SQL Server 2019 CU11) 中新增的輸入參數 (,則會發生存取違規。

  • 在 SQL Server 2019 CU11) 中加入內文 UDF 可能會造成錯誤,併產生錯誤碼 6846、1011 和 107 (。

  • 以非 sysadmin 帳戶執行的內建 UDF 可能會傳回錯誤訊息:「目前命令發生嚴重錯誤。  SQL Server 2019 CU16 () 中新增的結果,如果有的話,應該要捨棄」。

  • 如果使用在 Microsoft SQL Server 2022 CU1 和 SQL Server 2019 CU19) 中新增的同義字 (在 UDF 內叫用暫存數據表,就會發生存取違規。

  • 如果 UDF 定義只包含 GOTO 標籤和 SQL Server 2022 CU1 和 SQL Server 2019 CU19) (新增的RETURN 語句,就會發生存取違規。

  • SQL Server 2022 CU3 和 SQL Server 2019 CU20 () 中新增的 Scalar UDF Inlining 功能開啟時,Scalar UDF 會傳回不同的日期和時間格式。

  • 如果具有 GROUP BY 子句的查詢在 SELECT 語句中使用內嵌 UDF,而沒有在 SQL Server 2022 CU12 和 SQL Server 2019 CU26) 中新增匯總 (函數,就會產生轉儲檔案。

  • 開啟 Scalar UDF Inlining 功能時,發生錯誤「巢狀層級上限超過 (限制 32) 」,即使巢狀層級未超過 (SQL Server 2022 CU12 和 SQL Server 2019 CU26) 中新增的巢狀層級也一樣。

  • 如果已在 SQL Server 2022 CU12 和 SQL Server 2019 CU26) 中新增 (開啟 Scalar UDF Inlining 功能, sqllang.dll!CProchdr::FDeriveInlineabilityOfScalarUdf 中就會發生記憶體損毀。

此累積更新也會 下列案例中封鎖內置:

  • 例如,如果 UDF 參照 (某些內嵌函數, @@ROWCOUNT) 可能會在 SQL Server 2019 CU2) 中新增 UDF 內嵌 (時改變結果。

  • 當匯總函數以參數的形式傳遞至 SQL Server 2019 CU2) 中新增的縮放 UDF (時。

  • 例如,如果 UDF 參照內建檢視 (:SQL Server 2019 CU2) 中新增 OBJECT_ID) (。

  • 如果 UDF 使用 (SQL Server 2019 CU4) 中新增的 XML 方法。

  • 如果 UDF 包含使用ORDER BY子句但未 TOP 1(在 SQL Server 2019 CU4) 中新增的 SELECT語句。

  • 例如,如果SELECT 語句會與 ORDER BY 子句一起執行作業 (, SELECT @x = @x +1 FROM table ORDER BY column_name) (在 SQL Server 2019 CU4) 中新增。

  • 如果 UDF 包含 (在 SQL Server 2019 CU5) 中新增的多個 RETURN 語句。

  • 如果從 RETURN 語句撥打 UDF, (在 SQL Server 2019 CU5) 中新增。

  • 如果 UDF 參照 SQL Server 2019 CU5) 中新增的 STRING_AGG 函數 (。

  • 如果 UDF 定義參照 (在 SQL Server 2019 CU6) 中新增的遠端資料表。

  • 如果 UDF 通話查詢使用 SQL Server 2019 CU6) 中新增的 GROUPING SETSCUBEROLLUP (。

  • 例如,如果 UDF 呼叫查詢包含做為工作分派 (UDF 參數的變數, SELECT @y=2, @x=UDF(@y)) (在 SQL Server 2019 CU6) 中新增。

  • 如果 UDF 參照加密的欄 (在 SQL Server 2019 CU11) 中新增。

  • 如果 UDF 包含在 SQL Server 2019 CU11) 中新增的 WITH XMLNAMESPACES(參照。

  • 如果叫用 UDF 的查詢有在 SQL Server 2019 CU11) () 中新增 (CTEs) 的通用數據表表達式。

  • 如果 UDF 定義包含臨時表格的臨時表格或同義字, (在 SQL Server 2022 CU1 和 SQL Server 2019 CU19) 中新增。

  • 如果 UDF 定義具有SELECT語句,以及在 SQL Server 2022 CU4 和 SQL Server 2019 CU20) 中新增的多個工作分派 (欄DISTINCT子句。

  • 如果 UDF 包含使用 TABLESAMPLE PERCENT 子句的 SELECT 語句,以及在 SQL Server 2022 CU7) 中新增的多個變數指派 (。

  • 如果索引檢視所參照的數據表上存在 INSERT 查詢,該數據表包含在 SQL Server 2022 CU12 和 SQL Server 2019 CU26) 中新增的 UDF (。

升級至 SQL Server 2019 CU2 之後,但在升級至 SQL Server 2019 CU5 之前,您應該重新評估 UDF 是否符合輸入的資格。 若要這麼做,請透過下列其中一種方法重新整理合格的縮放UDF:

下列命令會產生腳本,以重新整理任何現有內嵌縮放 UDF 的元資料:

/*

Generates a script that can be used to refresh all active inlineable scalar UDFs.

Note The sp_refreshsqlmodule command does not affect any permissions, extended properties, or SET options that are associated with the object.

*/

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

注意:在您升級至 SQL Server 2019 CU5 之後,我們會在編譯期間繼續自動衍生 UDF 內嵌性。

解決方案

此問題已在下列 SQL Server 累積更新中修正:

每個 SQL Server 的新累積更新都包含所有 Hotfix 以及先前累積更新隨附的所有安全性修正。 檢視 SQL Server 的最新累積更新:

狀態

Microsoft 已確認<適用於>一節中所列的 Microsoft 產品確實有上述問題。

參考

了解 Microsoft 用來說明軟體更新的術語

需要更多協助嗎?

想要其他選項嗎?

探索訂閱權益、瀏覽訓練課程、瞭解如何保護您的裝置等等。

社群可協助您詢問並回答問題、提供意見反應,以及聆聽來自具有豐富知識的專家意見。

這項資訊有幫助嗎?

您對語言品質的滿意度如何?
以下何者是您會在意的事項?
按下 [提交] 後,您的意見反應將用來改善 Microsoft 產品與服務。 您的 IT 管理員將能夠收集這些資料。 隱私權聲明。

感謝您的意見反應!

×