存储过程和sql语句执行的结果不一样

zhaoj716 2010-03-20 04:14:00
现在我遇到一个怪事。存储过程和sql语句执行的结果不一样。

在三个表,分别为hp_zf(住房基本信息表),hp_zfd(员工住房登记表),hp_zd01(员工主档).
fjbh(房间编号),zflb(住房类别),cwbh(床位编号)这几个公用字段。

存储过程如下:

ALTER PROCEDURE [dbo].[HR_DormSpare_Find]
AS

select m.fjbh,m.zflb,d.cwbh
from hp_zf m inner join hp_zfd d on m.fjbh=d.fjbh
where m.fjbh+d.cwbh not in (select fjbh+cwbh from hp_zd01 where isnull(qcfrq,'')='' and isnull(lzrq,'')='')


我执行"exec HR_DormSpare_Find"后,显示了一千多条员工房间编号信息.而我单独执行以下sql语句

select m.fjbh,m.zflb,d.cwbh
from hp_zf m inner join hp_zfd d on m.fjbh=d.fjbh
where m.fjbh+d.cwbh not in (select fjbh+cwbh from hp_zd01 where isnull(qcfrq,'')='' and isnull(lzrq,'')='')

后就没任何数据显示,全是为空。

我就想不明白问题出在什么地方。请各位高手指点迷津。急!!!!
...全文
595 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhaoj716 2010-03-24
  • 打赏
  • 举报
回复
这个问题已经解决了。谢谢大家。

select m.fjbh,m.zflb,d.cwbh
from hp_zf m inner join hp_zfd d on m.fjbh=d.fjbh
where isnull(m.fjbh,'')+isnull(d.cwbh,'') not in (select isnull(fjbh,'')+isnull(cwbh,0) from hp_zd01 where isnull(qcfrq,'')='' and isnull(lzrq,'')='')

把sql语句这样改一下,存储过程和sql语句执行的结果就一样了。hp_zf、hp_zfd和hp_zd01表中的fjbh、cwbh字段数据类型是否为空有关。
zpzpyesterday 2010-03-23
  • 打赏
  • 举报
回复
楼主把执行计划发上来看看吧,
存储过程的和单独执行sql语句的
ziyang_518 2010-03-22
  • 打赏
  • 举报
回复
路过,奇事。

不太可能
zhaoj716 2010-03-22
  • 打赏
  • 举报
回复
数据库没有搞错,所以我很纳闷,不知道哪里出问题了。
andysun88 2010-03-22
  • 打赏
  • 举报
回复
不会吧!有这种事,数据库没有搞错?
永生天地 2010-03-22
  • 打赏
  • 举报
回复
把大家搞糊
zhaoj716 2010-03-22
  • 打赏
  • 举报
回复
数据库没有连错,都是放在同一个查询分析器中执行的。
Passage2011 2010-03-21
  • 打赏
  • 举报
回复
不会是你选择的数据库错了吧,放在同一个查询分析器的页面里执行
bdx808 2010-03-21
  • 打赏
  • 举报
回复
迷糊中.......................
帮顶
--小F-- 2010-03-21
  • 打赏
  • 举报
回复
会不会是空值造成的影响??
zhaoj716 2010-03-21
  • 打赏
  • 举报
回复
我以前从来没有遇到这种情况。两个执行的结果竟然不一样。
zhaoj716 2010-03-21
  • 打赏
  • 举报
回复
这几个表我都单独执行过的。而且数据库都没连错。
-狙击手- 2010-03-20
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 dawugui 的回复:]
如果两句一模一样,不可能出现你说的情况,也许你数据库连接错了.
[/Quote]

这个值得怀疑
dawugui 2010-03-20
  • 打赏
  • 举报
回复
如果两句一模一样,不可能出现你说的情况,也许你数据库连接错了.
黄_瓜 2010-03-20
  • 打赏
  • 举报
回复
select m.fjbh,m.zflb,d.cwbh
from hp_zf m inner join hp_zfd d on m.fjbh=d.fjbh
where m.fjbh+d.cwbh not in (select fjbh+cwbh
/*这样也可以?*/from hp_zd01 where isnull(qcfrq,'')='' and isnull(lzrq,'')='')
--小F-- 2010-03-20
  • 打赏
  • 举报
回复
奇怪....
黄_瓜 2010-03-20
  • 打赏
  • 举报
回复
是mssql吗?
jsddj 2010-03-20
  • 打赏
  • 举报
回复
将子表单独执行一下看看

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧