有一个实例,我拥有的过滤器被动态插入到我的 SQL 查询中,有时无法事先判断它们是int
还是varchar
. 有没有办法允许任何一个CASE WHEN
声明?
在我的表(ent
对于实体)中,公司列是字符串/ varchar
,entid
列是int
. 当 int 是过滤器或字符串是过滤器时,我似乎无法让这个CASE IsNumeric
语句起作用。
这有效:
select
ent.company
from
ent
where
ent.company in
(CASE
WHEN IsNumeric(CONVERT(VARCHAR(100), 'ABIS, Inc.')) = 0
THEN CONVERT(VARCHAR(100), 'ABIS, Inc.')
ELSE '99'
END,
CASE
WHEN IsNumeric(CONVERT(VARCHAR(100), 'Schulte Building Systems')) = 0
THEN CONVERT(VARCHAR(100), 'Schulte Building Systems')
ELSE '1423'
END)
这不起作用:
select
ent.company
from
ent
where
ent.entid in
(CASE
WHEN IsNumeric(CONVERT(VARCHAR(100), 'ABIS, Inc.')) = 0
THEN CONVERT(VARCHAR(100), 'ABIS, Inc.')
ELSE '99'
END,
CASE
WHEN IsNumeric(CONVERT(VARCHAR(100), 'Schulte Building Systems')) = 0
THEN CONVERT(VARCHAR(100), 'Schulte Building Systems')
ELSE '1423'
END)
...但是对于 int equals,如果我将 0 更改为 1,它就可以工作(如果我使用 company equals,它什么也不返回)。知道为什么会失败吗?