试:
create proc p1(@a varchar(1))
as 
declare @out int
begin tran t1
    exec p2 @a   -----------------一个用了insert into的存储过程
    exec p3 @a,@out output--------一个用了update 的存储过程
-------如果不执行p3,则可以得到get_recordcount()=1
-------如果执行p2,则get_recordcount()=-1
------百思不得其解,附p3大致过程见后,请大侠帮忙
    if(@out<>0) ??????为什么判为0,0是没有UPDATE记录的。
     begin
        commit tran t1
        set =1,msg='ok'
    end
    else       ??????为什么判不为0,如1是UPDATE了一条记录的。但ROLLBACK了,就没有数据集了。
    begin 
        rollback tran t1
        set =0,msg='error'
    end
create proc p3 (@a varchar(1),@out int output) as
set nocount off
if(@a='1')
   update table set .......
else
   update table set .......
set @out = @@rowcount
return

解决方案 »

  1.   

    to tj_dns(愉快的登山者) 
    if(@out<>0) 这里的判断是不是为0是我人为定义的,我在存储过程内部内义的,符合条件并执行了相应操作的才是0实际上按蚂蚁说的,定义两个变量@Mark,@Message
    最后select Mark=@,Message=@message
    这样就可以正确地提示有结果集返回,真不知道为什么
    select Mark=0,Message='error'
    这样不能正确地返回?(执行存储过程能返回,但是在程序中调用的时候不能返回,,,郁闷
      

  2.   

    还有有问题就是
    既使我按上面所述,定义两个变量@Mark,@Message
    最后select Mark=@,Message=@message
    这样就可以正确地提示有结果集返回
    但是调用的存储过程不一样结果还是不一样
    如果仅调用insert into类型的存储过程的话结果正确
    但是如果存储过程中含用update之类的语句的话结果又不正确了狂晕................................................