2011-09-22 81 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