当在 WHERE 子句中使用 CASE 时,没有 ELSE,NULL 是什么意思


declare @Name varchar(45)
SELECT
     *
FROM
     table law
WHERE
     --law.emp = case when isnumeric(@Name) = 1 then @Name else null end
     law.emp = case when isnumeric(@Name) = 1 then @Name end
     or coalesce(law.lname + ', ' + law.fname, '') like '%' + @Name + '%'

我在这里的问题是关注CASE语句,当它的计算结果不是数值时......

如果@Name不是数值,那么到底发生了什么? law.emp = null ??? 如果是这样,它无论如何都不应该返回任何结果,因为正确的语法类似于where law.emp is null,对吧?

因此,为了澄清起见,我的emp列实际上不包含任何空值。

我只是想弄清楚当@Name评估到非数字的东西时,我的WHERE陈述到底发生了什么......

正在进行哪些实际评估? SQL 是否忽略了该条件?

这就是我想要的:除非 SQL 是数字,否则 SQL 不要law.emp做任何事情@Name。 (我还有其他条件,如果它是文本,将使用 @Name 变量。

表达式:

law.emp = NULL

总是返回NULL . 在 where 子句中,这被视为 false,并且该行不包含在结果集中。

我更喜欢显式转换:

law.emp = try_convert(int, @Name)

或者emp是什么类型。

最新更新