簡體   English   中英

T-SQL轉換錯誤和WHERE…NOT IN

[英]T-SQL Conversion Errors and WHERE…NOT IN

我們正在將varchar(15)戶主加入一個整數成員ID。 過去,這從來沒有引發過錯誤,因為“戶主”字段中的字符始終是數字。 我們最近引入了一些測試用例,這些用例遵循'QESUB'模式+最多十位數字。 這些測試用例需要從任何處理中過濾掉。

以下SQL成功過濾掉了測試用例。 但是,當添加一個新的測試用例時,我們需要進入一個新的值,並將新值添加到NOT IN子句中的硬編碼排除列表中。

SELECT TOP 1000 
    m.headofhouse,
    mx.MemberID
FROM
    foo1.dbo.member m
INNER JOIN  
    foo2.dbo.tbMembers mx ON m.headofhouse = mx.MemberID
WHERE   
    m.headofhouse NOT IN ('QESUB0000000190', 'QESUB0000000286',
                          'QESUB0000000308', 'QESUB0000000310',
                          'QESUB0000000315', 'QESUB0000000325',
                          'QESUB0000000330', 'QESUB0000001353',
                          'QESUB0000001367', 'QESUB0000001368')
    AND mx.MemberID = 100009

該腳本返回

headofhouse   MemberID
----------------------
100009        100009

我嘗試了許多不同的方法來替換WHERE字段NOT IN(值列表),但是似乎沒有任何效果。

SELECT TOP 1000 
    m.headofhouse,  mx.MemberID
FROM    
    foo1.dbo.member m
INNER JOIN  
    foo2.dbo.tbMembers mx ON m.headofhouse = mx.MemberID
WHERE   
    LEFT(m.headofhouse, 5) <> 'QESUB'       
    AND mx.MemberID = 100009

錯誤:

將varchar值'QESUB0000000190'轉換為數據類型int時,轉換失敗。

我試圖了解為什么WHERE fieldname NOT IN...似乎與我嘗試過的其余WHERE子句的行為有所不同。 NOT IN的處理順序有什么特別之處嗎? 還是還有其他事情發生? 任何故障排除提示,將不勝感激。

作為字符串進行比較:

FROM foo1.dbo.member m JOIN
     foo2.dbo.tbMembers mx 
     ON m.headofhouse = CONVERT(VARCHAR(15), mx.MemberID)

如果您在headofhouse上使用前導零,則可能會出現問題。

您可以進行子查詢

SELECT  TOP 1000    
     m.headofhouse,   mx.MemberID
FROM  (
   SELECT headofhouse
   FROM foo1.dbo.member
   WHERE left(headofhouse,5) <> 'QESUB'
) m
INNER JOIN  foo2.dbo.tbMembers mx on m.headofhouse = mx.MemberID
WHERE mx.MemberID = 100009

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM