日期:2014-05-18  浏览次数:20426 次

存储过程问题~!大哥大姐小妹妹来帮忙~!! 在线等 !~
CREATE   PROCEDURE     Select_Insert_Cart_Proc
@CID   int,
@PID   int
    AS
declare   @flag   int
set   @flag=0
if(@CID=(select   CID   from   tosell   where   PID=@CID))
begin      
              set   @flag=2
end

else  
      begin

if     not   exists(   select   *   from   cart   where   CID=@CID   and   PID=@PID)
begin  
set   @flag=1
insert   into   cart   (CID,PID)   values   (@CID,@PID)
end  
else
begin  
set   @flag=-1
end
end

return   @flag
GO

我要做一个购物车的程序,其中   @CID   传递的是当前浏览的用户;   @PID是当前用户正在浏览的货物号。

表   tosell   代表正在销售中的物品,其中PK   是   PID   ,外键   有   CID   (customer表中主键)

先检测   当前正在浏览的用户   @CID     是不是与     tosell   中的   CID   一样,如果一样,就不能把自己的物品放入购物车....后面的就不用说了吧   ,可是,为什么我得不到  
@flag=2的情况,就算是自己买自己的东西。       帮忙。。。。。

------解决方案--------------------
小妹妹小弟弟
------解决方案--------------------
CREATE PROCEDURE Select_Insert_Cart_Proc
@CID int,
@PID int
AS
declare @flag int,
declare @tempID int
set @flag=0
select top 1 @tempID = CID from tosell where PID=@CID

if @CID = @tempID
begin
set @flag=2
end

else
begin

if not exists( select * from cart where CID=@CID and PID=@PID)
begin
set @flag=1
insert into cart (CID,PID) values (@CID,@PID)
end
else
begin
set @flag=-1
end
end

return @flag
GO

这样行不行?
------解决方案--------------------
select CID from tosell where PID=@CID

检测这句返回得记录集

如果是多条. 会有错误.
------解决方案--------------------
@CID=(select CID from tosell where PID=@CID)
这个表达式左边是个变量,而右边可能是个集合所以不相等,结果为false;
------解决方案--------------------
select top 1 @tempID = CID from tosell where PID=@CID

if @CID = @tempID


-------------
把这个@tempID 输出来看看