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
是什么类型。