[英]'where' condition doesn't work in 'in' clause
我有以下三个表
Orders [orderNo int]
OrderDetails [orderNo int , qty int]
StoreDocuments [docNo int, systemKey nvarChar(20)]
当我执行以下查询以获取没有任何StoreDocuments
订单时,出现此错误
转换nvarchar值'。'时转换失败。 数据类型为int
码:
Select
Sum(Dt.Qty) as SumQty
From
Orders as [Or]
inner join
OrderDetails as Dt on [Or].orderNo = Dt.orderNo
Where
[Or].orderNo NOT IN (Select SystemKey
From StoreDocuments
Where SystemKey <> '.')
如果StoreDocuments
中没有systemKey
值为'.'
记录, StoreDocuments
引发错误'.'
。
我的问题是,为什么内部查询where systemkey <> '.'
的where子句where systemkey <> '.'
无法按预期执行,并导致引发错误?
出现异常的原因是SQL Server尝试将您的orderNo
与任何SystemKey
条目匹配。 它通过在比较之前将SystemKey
条目转换为int来实现。 您输入的一项是不可转换的,即它不是数字,因此您会得到例外。
该怎么办? 将orderNo
转换为orderNo
,然后一切都会好起来的
Select Sum(Dt.Qty) as SumQty
From Orders o
inner join OrderDetails as Dt
on o.orderNo = Dt.orderNo
Where cast(o.orderNo as NVarChar) Not IN
(
Select SystemKey From StoreDocuments Where SystemKey <> '.'
)
这应该为您工作:
Select Sum(Dt.Qty) as SumQty
From
Orders as [Or] inner join OrderDetails as Dt
on [Or].orderNo = Dt.orderNo
Where cast([Or].orderNo as nvarchar(20)) Not IN
(
Select SystemKey From StoreDocuments Where SystemKey <> '.'
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.