在 SQL Server 2008 的 WHERE 子句中使用巢狀 CASE 語句
使用 SQL Server 2008 時,使用者在 WHERE 子句中使用 CASE 語句時可能會遇到挑戰。錯誤訊息通常源自於這些條件表達式的放置不正確。
根本問題在於文法。 「CASE」語句應作為表達式的組成部分使用,而不是作為表達式本身。例如,可以這樣寫:
<code class="language-sql">WHERE co.DTEntered = CASE WHEN LEN('blah') = 0 THEN co.DTEntered ELSE '2011-01-01' END </code>
但是,以下語法是錯誤的:
<code class="language-sql">WHERE CASE LEN('TestPerson') WHEN 0 THEN co.personentered = co.personentered ELSE co.personentered LIKE '%TestPerson' END </code>
為了解決這個問題,更適合的方法是使用組合的 OR 語句。修改後的查詢如下圖所示:
<code class="language-sql">WHERE ( (LEN('TestPerson') = 0 AND co.personentered = co.personentered ) OR (LEN('TestPerson') <> 0 AND co.personentered LIKE '%TestPerson') )</code>
雖然這種方法可以減輕語法錯誤,但需要注意的是,在 WHERE 子句中大量巢狀的 CASE 語句會阻礙查詢最佳化。這些條件表達式的存在會阻止索引的使用,這可能導致查詢效能下降。
以上是如何正確使用SQL Server 2008 WHERE子句中的巢狀CASE語句?的詳細內容。更多資訊請關注PHP中文網其他相關文章!