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
列实际上并不包含任何空值。
当WHERE
评估为不是数字的东西时,我只想弄清楚我的@Name
语句真正发生了什么......
正在做什么实际评估? SQL忽略了这个条件吗?
这就是我想要的东西:对于SQL,除非law.emp
是数字,否则不要对@Name
做任何事情。 (如果是文本,我还有其他使用@Name
变量的条件。)
表达方式:
law.emp = NULL
总是返回NULL
。在where
子句中,将其视为false,并且该行不包含在结果集中。
我更喜欢显式转换:
law.emp = try_convert(int, @Name)
或者emp
的任何类型。