簡體   English   中英

從select語句中調用函數-SQL

[英]Calling a function from within a select statement - SQL

我有以下聲明:

SELECT CASE WHEN (1 = 1) THEN 10 ELSE dbo.at_Test_Function(5) END AS Result 

我只想確認在這種情況下將不會執行該功能?

我問的原因是該函數特別慢,如果critiria是正確的,我想避免調用該函數...

干杯安東尼

您的假設是正確的-不會執行。 我了解您的關注,但是CASE構造是“智能”的-在第一個有效條件之后,它不會評估任何條件。 這是一個證明這一點的例子。 如果要執行此case語句的兩個分支,則將收到“被零除”錯誤:

SELECT  CASE
                WHEN 1=1 THEN 1
                WHEN 2=2 THEN 1/0
            END AS ProofOfConcept

這有意義嗎?

不要做這個假設,這是錯誤的 查詢優化器完全可以自由選擇自己喜歡的評估順序,而SQL作為一種語言不提供運算符短路。 即使您在測試中發現從未評估過該函數,但在生產中,您可能時不時地碰到一些條件,這些條件會導致服務器選擇其他執行計划,然后先評估函數,然后再評估表達式的其余部分。 當服務器注意到該函數的返回是確定的,不依賴於該行的數據,在這種情況下,它會先評估函數來獲取值, 之后開始掃描表和評估WHERE納入標准的一個典型例子是,使用預先確定的功能值。

假設您正在進行某種測試...如果要避免使用at_Test_Function,為什么不將其注釋掉並執行

SELECT 10 AS Result

在函數中放置WaitFor Delay '00:00:05' 如果該語句立即返回,則需要5秒鍾才能返回,則該語句沒有執行,則該語句已執行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM