我工作的內容大致如下的查詢:麻煩執行的where子句中的函數,如果條件滿足
SELECT 1
FROM Table1 as t1
INNER JOIN Table2 AS t2 ON t2.firstName = t1.firstName
WHERE
t2.firstName='John'
AND t1.age > 14
現在我想運行一個用戶定義的函數對組織檢查某些標準ID,但是只有如果ID不是空白。我試過只包括
organizationid = ''
AND dbo.validID(organizationid) = 1
但是由於SQL不使用短路評估,所以函數仍然運行。當它在大數據集上運行時,這會減慢速度,我試圖避免這種情況。我用下面的case
聲明還嘗試:
CASE
WHEN t1.organizationid != '' THEN (AND dbo.validID(organizationid) = 1)
END
但SQL似乎並不喜歡這樣,我得到了一個不正確的語法錯誤。
如何運行此用戶定義函數,但只有如果符合某些條件?
您正在使用哪些DBMS? –
Microsoft sql server 2008 – ConorBaumgart
步驟:1)將你的函數轉換成內聯表值函數(iTVF),2)改變你的查詢來使用iTVF,然後3)讓SQL優化器完成它的工作。 – RBarryYoung