我有三张表格如下
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
值'.'
没有记录,则会引发错误。
我的问题是,为什么内部查询where systemkey <> '.'
中的where子句
没有像预期的那样执行它会引起错误吗?
答案 0 :(得分:2)
您的异常的原因是SQL-Server尝试将您的orderNo
与任何SystemKey
条目匹配。它通过在比较之前将SystemKey
条目转换为int来实现。你的一个条目是不可转换的,即它不是一个数字,所以你得到了你的例外。
怎么办?将orderNo
转换为NVarChar然后一切都应该没问题
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 <> '.'
)
答案 1 :(得分:0)
这应该适合你:
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 <> '.'
)