d6中调用SQLSVR存储过程,得到的结果不正确

Description of your first forum.

d6中调用SQLSVR存储过程,得到的结果不正确

帖子yherxl » 星期一, 2003年6月2日 11:44


使用delphi6, SQL SERVER 2000, 用ADO直接连接
程序中调用一个存储过程,对人员表用一个左连接,没有记录的人员也出现在表中.
在QUERY ANALYSER中结果是对的, 但用程序执行后,得到的结果中却没有外连接
所得到的那些行.  
请赐教
 
 
 

d6中调用SQLSVR存储过程,得到的结果不正确

帖子jopi » 星期一, 2003年6月2日 11:50


把进程贴出来
 
 
 

d6中调用SQLSVR存储过程,得到的结果不正确

帖子xzh2000 » 星期一, 2003年6月2日 11:50


有这种事,帮你测试一下。
 
 
 

d6中调用SQLSVR存储过程,得到的结果不正确

帖子xzh2000 » 星期一, 2003年6月2日 11:56


--create table m1(id int,name varchar(20))
--create table m2(id int,qty tinyint)


insert into m1 values(1,'abc')
insert into m1 values(2,'def')

insert into m2 values(1,20)

create procedure p_s
as

select m1.id,m1.name,m2.qty from m1  left outer join m2
on m1.id=m2.id

exec p_s

我测试的结果和楼主的不符,完全正确,是不是你的LEFT JOIN弄错啦。
 
 
 

d6中调用SQLSVR存储过程,得到的结果不正确

帖子yherxl » 星期一, 2003年6月2日 13:22


过程如下,共有五个表, YGBZ:员工编号(YGBH),员工ID(YGID),员工姓名(YGXM)....
                    BMB:部门编号(BMBH),部门名称(BMMC)
                    EATRECORD:IDTIME(打卡时间),YGID,....
                    EATTIME:具体的时间段
                    EATYG:员工对应的就餐的时间段号码
                   
CREATE    PROCEDURE [sp_eatmx_all]
@bgntm smalldatetime,
@endtm smalldatetime
AS
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[eatmx]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[eatmx]

create table eatmx (
ygbh varchar(5),
ygxm varchar(10),
bmmc varchar(20),
idtm varchar(20),
bgntm varchar(8),
endtm varchar(8),
jcjq varchar(2),
status varchar(20)
)
insert eatmx
SELECT ygbz.ygbh AS ygbh, ygbz.ygxm AS ygxm, bmb.bmmc AS ygbm, eatrecord.idtime,
     eattime.bgntm,eattime.endtm, eatrecord.jcjq,null
FROM eatyg INNER JOIN
     eattime ON eatyg.eatid = eattime.eatid INNER JOIN
     ygbz ON eatyg.ygbh = ygbz.ygbh LEFT OUTER JOIN
     eatrecord ON ygbz.ygid = eatrecord.ygid INNER JOIN
     bmb ON ygbz.bmbh = bmb.bmbh
WHERE (eatrecord.idtime > @bgntm AND eatrecord.idtime < @endtm )
order by ygbh, idtime

update eatmx set status=case
  when cast(right(idtm,8) as Date time)< cast(bgntm as datetime) then '提前就餐'
  when cast(right(idtm,8) as datetime)>=cast(bgntm as datetime) and cast(right(idtm,8) as datetime)<= cast(endtm as datetime) then '正常就餐'
  when cast(right(idtm,8) as datetime) > cast(endtm as datetime) then '延后就餐'
 else '没有就餐'
end
GO







 
 
 

d6中调用SQLSVR存储过程,得到的结果不正确

帖子yherxl » 星期四, 2003年7月17日 15:33


找到毛病了
where 条件出的问题