请教一下,我这个过程中定义了一个变量,这个变量在判断的时候怎么老是为空呢?
当中的那个查询语句查询出来明明有一条数据,但过程的输出消息老是提示:没有检索到需要结算的费用
请指点一下,谢谢了,只有这么多分了 = =~
create proc [dbo].[SP_SST_JSDP_JSMX]
(
@P_YYJGDM char,
@P_CARDNO char,
@P_DQBHOO varchar(20),
@P_ERRMSG varchar(50) out
)
as
  declare @chargeApplyID varchar(30)
  --根据卡号查找第一个未结算的结算申请
SELECT  top (1) @chargeApplyID =a.ChargeApplyID FROM dbo.OUTPBILL_ChargeApply AS a 
LEFT OUTER JOIN dbo.CARD_Patient AS b ON a.PatientID = b.PatientID
LEFT OUTER JOIN dbo.CARD_Card AS c ON b.CardID = c.CardID
  where (a.State = 1) AND (c.CardCode=@P_CARDNO) 
  if (@chargeApplyID is null)
  begin
    select @P_ERRMSG='没有检索到需要结算的费用'
    return 
  end
  else
...
)

解决方案 »

  1.   

    在企业管理器里用这个查一下:
    SELECT  top (1) a.ChargeApplyID FROM dbo.OUTPBILL_ChargeApply AS a 
        LEFT OUTER JOIN dbo.CARD_Patient AS b ON a.PatientID = b.PatientID
        LEFT OUTER JOIN dbo.CARD_Card AS c ON b.CardID = c.CardID
      where (a.State = 1) AND (c.CardCode=@P_CARDNO)  --这个参数改为实际传到存储过程中的值看是否真的有那么一条记录,而且这条记录的 chargeapplyid 不为 NULL.
      

  2.   

    那:
    create proc [dbo].[SP_SST_JSDP_JSMX]
    (
    @P_YYJGDM char,
    @P_CARDNO char,
    @P_DQBHOO varchar(20),
    @P_ERRMSG varchar(50) out  --这个应该是 output
    )
    as
      declare @chargeApplyID varchar(30)
      --根据卡号查找第一个未结算的结算申请
    SELECT  top (1) @chargeApplyID =a.ChargeApplyID FROM dbo.OUTPBILL_ChargeApply AS a 
        LEFT OUTER JOIN dbo.CARD_Patient AS b ON a.PatientID = b.PatientID
        LEFT OUTER JOIN dbo.CARD_Card AS c ON b.CardID = c.CardID
      where (a.State = 1) AND (c.CardCode=@P_CARDNO) 
    --在这里插入这一句:
    select @chargeApplyID
    --看有没有输出
      if (@chargeApplyID is null)
      begin
        select @P_ERRMSG='没有检索到需要结算的费用'
        return 
      end
      else
    ...
    )
    估计你还是哪儿有个什么参数写得不对,因为既然语句没问题,那写到存储过程里也不会出现查不到的现象,除非不是那样查的.
      

  3.   

    if (@chargeApplyID is null)
    上面这句改为if (@@rowcount=0)
      

  4.   

    总算搞清楚了,是因为这个参数类型引起的  @P_CARDNO char,   我的数据字段类型是nvarchar 这里传char就查不出数据,前几天也碰到过一次,太郁闷了!!!
      

  5.   


    来CSDN的目的达到了,自己查出来问题,很好!其实编程水平就是这么积累出来的.