请教个过程参数问题

请教一下,我这个过程中定义了一个变量,这个变量在判断的时候怎么老是为空呢?
当中的那个查询语句查询出来明明有一条数据,但过程的输出消息老是提示:没有检索到需要结算的费用
请指点一下,谢谢了,只有这么多分了 = =~

SQL code

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
...
)

作者: zhlin3415058   发布时间: 2011-06-11

在企业管理器里用这个查一下:
SQL code
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.

作者: qianjin036a   发布时间: 2011-06-11

引用 1 楼 qianjin036a 的回复:

在企业管理器里用这个查一下:
SQL code
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 ……


我查过,输出有个编号值

作者: zhlin3415058   发布时间: 2011-06-11

那:
SQL code
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
...
)



估计你还是哪儿有个什么参数写得不对,因为既然语句没问题,那写到存储过程里也不会出现查不到的现象,除非不是那样查的.

作者: qianjin036a   发布时间: 2011-06-11

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

作者: cd731107   发布时间: 2011-06-11

引用 3 楼 qianjin036a 的回复:

那:
SQL code
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)
--根据卡……



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

作者: zhlin3415058   发布时间: 2011-06-11