前言
最近同事詢問一個很奇怪的問題,他們有一個 Scalar Function 在 MSSQL 2019 (15.0.2000.5)上面執行,
透過 SSMS 直接執行該 Function ,結果一直跑不出來。
直接跑 Function 裡面的 Script,卻一下子就跑出來。
一樣的程式,在另一台 Server (15.0.4153.1)上也一下子就跑出來了。
到底是怎麼一回事呢?
研究
SQL 的 Scalar Function 大約長的如下的程式碼(if else if ….大約 19 個),
1 | CREATE FUNCTION [dbo].[ufn_get_user_info3]( |
直接在 SSMS 下 Select [dbo].[ufn_get_user_info3]('admin', 'NormalizedEmail')
就沒有回應了。
原本想說會不會是使用了太多 CPU 的原因,
所以在原本的 Script 後加上 OPTION (MAXDOP 1)
,
還是一樣的狀況。在測試環境上,約跑了 1 分 24 秒 資料才出來。
預估的執行計劃如下,
但刪掉一些 if-else 資料就可以很順利的跑出來。
完全沒想法,感覺 SQL 都到了 2019 應該不會有這種 問題呀~~~
…
…
…
結果後來同事將 MSSQL 2019 更新到新的版本,執行就沒問題了。
目前測試在 SQL Server 2019 版本 15.0.4153.1 上跑是沒問題的。
下次要懷疑自已前,先懷疑軟體是否有更新到新的版本。
- 註: Terry Chuang 有將 if-else 改成 case when 就不會有這種問題,感謝 Terry Chuang 的分享。
測試的資料如下,
1 | CREATE TABLE [dbo].[AbpUsers]( |