0

有一个实例,我拥有的过滤器被动态插入到我的 SQL 查询中,有时无法事先判断它们是int还是varchar. 有没有办法允许任何一个CASE WHEN声明?

在我的表(ent对于实体)中,公司列是字符串/ varcharentid列是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,它什么也不返回)。知道为什么会失败吗?

4

1 回答 1

0

解决了。我从来没有问过实际的列 - 只是过滤器。

select ent.entid, ent.company from ent where 

ent.entid in
(
    CASE IsNumeric(entid) WHEN 1 then '99' else 'ABIS, Inc.' End,
    CASE IsNumeric(entid) WHEN 1 then '1423' else 'Schulte Building Systems' End    
)

select ent.entid, ent.company from ent where 

ent.company in
(
    CASE IsNumeric(company) WHEN 1 then '99' else 'ABIS, Inc.' End,
    CASE IsNumeric(company) WHEN 1 then '1423' else 'Schulte Building Systems' End  
)

两者都有效。

于 2015-09-09T16:14:10.357 回答