[英]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.