我遇到了一个非常奇怪的问题。有两个SQL查询:
Q1:
SELECT *
FROM tbl_1
WHERE ID IN (SELECT TargetID
FROM tbl_2
WHERE PeopleID = 'AAA')
AND ID = 49
Q2:
SELECT *
FROM tbl_1
WHERE ID IN (SELECT TargetID
FROM tbl_2
WHERE PeopleID = 'BBB')
AND ID = 49
除了 PeopleID 之外,我们可以发现这两个查询完全相同。但他们的结果非常不同。对于Q1,我们得到“错误将数据类型varchar转换为数字”;第二季度,它运行良好。我很困惑!
有一些信息可能有用。
tbl_1 ID numeric(18,0) not null
tbl_2 TargetID varchar(50) not null
并且Q1或Q2中的每个 TargetID 都可以通过IsNumeric
测试(即IsNumeric(TargetID) = 1
)
另一个信息:如果我们对行AND ID = 49
发表评论并且每个查询都运行良好
thx求助
答案 0 :(得分:2)
我会尝试做这样的事情:
SELECT *
FROM tbl_1
WHERE convert(varchar(50), ID) IN (SELECT TargetID
FROM tbl_2
WHERE PeopleID = 'BBB')
AND ID = 49
因为ID被转换为varchar,所以它应该可以正常工作。
答案 1 :(得分:0)
如何使用EXISTS?
SELECT *
FROM tbl_1
WHERE EXISTS (SELECT *
FROM tbl_2
WHERE PeopleID = 'BBB'
AND tbl_2.TargetID = tbl_1.ID)
AND ID = 49
答案 2 :(得分:0)
@Vincent在PeopleID ='BBB'时检查TargetID之前或之后是否有空格类型字符(或货币字符)? 如果在TargetID之前或之后有Tab或CrLf等,您将收到此错误消息。但是,常规空格不应该出错。