首页 新闻 会员 周边 捐助

SQLSERVER数据库有个难以理解的错误

0
悬赏园豆:10 [待解决问题]

是这样的,

上面的红框中的条件,如果这个条件加上,是一条记录也不能插入,如果不加这个条件,却是可以插入所有正确的记录,

但是这个VWBSWB.swbID字段,在SynchronizeInOutStore中是不可能存在的,也许这个条件是不必要的,因为系统这个插入操作只进行一次,以防万一出现再次插入的情况所以就加了这个条件进行限制。

这种错误出现的比较少,基本都能正确插入。我就纳闷了,明明not in 这个条件始终为true的,为什么却一条也插入不了?

付鹏DragonDeal(龙易)的主页 付鹏DragonDeal(龙易) | 初学一级 | 园豆:190
提问于:2014-10-17 15:50
< >
分享
所有回答(3)
0

not in  按你的说法一定为true,建议你拿你实例中的一条数据测试,没什么意外的话就是你说认为的一定它不一定。不过你这语句写的确实太冗余了...

风醉 | 园豆:1197 (小虾三级) | 2014-10-17 16:03

知道语句是不好的,这是去年写好的,不想改了。只是纳闷这个情况怎么会出现,会不会表数据量大了会出现,现在200多万条了,我测试过,确实一个swbID也不存在的

支持(0) 反对(0) 付鹏DragonDeal(龙易) | 园豆:190 (初学一级) | 2014-10-17 16:06

@付鹏DragonDeal(龙易): 你这样 先执行下面那条语句,看看结果集,确定下是有结果集 插不进去,还是没结果集,分开解决问题,你这样就判断加上这条语句就插不进去,太武断了

支持(0) 反对(0) 风醉 | 园豆:1197 (小虾三级) | 2014-10-17 16:14

@风醉: 我当时测过了,下面部分加上那个条件,是查不出记录来的,不加那个框框的条件确实是有记录的。

 

接着我在SynchronizeInOutStore中查询swbID,大致是这样查的:

select * from V_WayBill_SubWayBill where wbID = 444 and swbID in

(

select sios_swbID from SynchronizeInOutStore

)

 

却一条也查不出,也就是SynchronizeInOutStore表中不存在对应的swbID。

 

 

纳闷

支持(0) 反对(0) 付鹏DragonDeal(龙易) | 园豆:190 (初学一级) | 2014-10-17 16:19

@付鹏DragonDeal(龙易): 

那你的意思 是

select * from  sios_swbID from SynchronizeInOutStore where sios_swbID in(

select swbID from  V_WayBill_SubWayBill where wbID = 444) 是有记录的了....

支持(0) 反对(0) 风醉 | 园豆:1197 (小虾三级) | 2014-10-17 16:29

@风醉: 你弄反了,你这个查询  我们没必要

支持(0) 反对(0) 付鹏DragonDeal(龙易) | 园豆:190 (初学一级) | 2014-10-17 16:33

@付鹏DragonDeal(龙易):  你为了确认里面有没有数据,这个查询很有必要

支持(0) 反对(0) 风醉 | 园豆:1197 (小虾三级) | 2014-10-17 16:56
0

觉得是 select sios_swbID from SynchronizeInOutStore 中, sios_swbid 有null 值的存在,not in 返回值有可能是

unknown, 你可以在语句中加上 select sios_swbID from SynchronizeInOutStore where sios_swbid is not null 再试

试。

fly_zj | 园豆:208 (菜鸟二级) | 2014-12-29 15:45
0

建议:

1)尽量不要在where条件上做这种计算,性能较差。可以用join改写下。

2)可以考虑使用CTE,再插入。

FishParadise | 园豆:206 (菜鸟二级) | 2015-06-19 09:58
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册