在 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中文网其他相关文章!