2011-09-22 86 views
1

我正在尝试构建一个SQL脚本,该脚本将生成正向转换的字段列表。我的意思是,当应用程序最初部署时,我们必须将旧数据迁移到新数据库中,因为旧数据不符合新标准。我没有做迁移,只是把它清理干净。TSQL - 排除条件

设计:

select * from tblclient 
where LEN(clientmatter) <> 11 
    and clientmatter not in (select * from tblclient 
       where ISNUMERIC(clientmatter) <> 1) 

我知道语法这不会工作,但设计应该放下架子上什么,我试图做的。

条件内的派生表将与Union All中的该辅助表一起使用。我试图从长度问题结果中排除非数字结果,所以我可以在两种条件下获得一组完整的信息。

测试的设计:

select 'non-numeric', clientmatter 
from tblclient 
where ISNUMERIC(clientmatter) <> 1 
UNION ALL 
select 'length problem', clientmatter 
from tblclient 
where LEN(clientmatter) <> 11 

试过,但我得到重复。我记得做了一个脚本,在那里我联合了两个查询,但只产生了一个结果,但能记住我是如何做到的。

回答

1
SELECT clientmatter, 
     CASE 
     WHEN LEN(clientmatter) <> 11 THEN 'length problem' 
     END, 
     CASE 
     WHEN ISNUMERIC(clientmatter) <> 1 THEN 'non-numeric' 
     END 
FROM tblclient 
WHERE ISNUMERIC(clientmatter) <> 1 
     OR LEN(clientmatter) <> 11 
+0

这个工作....我猜得太多了逻辑.....长度和非数字常量只是一个调试步骤。结束添加Length和IsNumeric值作为测试列。最终结果是clientmatter值将是结果表中唯一的字段。 – GoldBishop

0

试试这个

select 'non-numeric', clientmatter 
from tblclient 
where ISNUMERIC(clientmatter) <> 1 and LEN(clientmatter)=11 
UNION ALL 
select 'length problem', clientmatter 
from tblclient 
where LEN(clientmatter) <> 11 and IsNumeric(clientMatter)=1 
UNION ALL 
select 'both problems', clientmatter 
from tblclient 
where LEN(clientmatter) <> 11 and IsNumeric(clientMatter)=0