带输出参数的存储过程的使用及在C#中调用问题


创建示例存储过程的完整的语句:


USE pubs
IF EXISTS (SELECT name FROM sysobjects
         WHERE name = 'up_test ' AND type = 'P')
   DROP PROCEDURE up_test
GO
create procedure  up_test  
@out_val integer=0 output
--@out_val integer output    ------1
as
begin
--set @out_val=0            -----2
    if(1=1)                 
-----3
        set @out_val=@out_val+1
return 9;
end

存储过程在查询分析其中使用示例:

1、简单调用
   
exec up_test  3
    --注:调用时也要给输出参数传值,有给定默认值时可以不再给参数指定值
2、调用并使用存储过程中的输出参数返回值
    declare @ret_val int
    declare @output_val int
    exec @ret_val=up_test @out_val=@output_val output     
-----4
    select @ret_val,@output_val


值得说明的是:如果只是给定了默认值,调用时未给该输出参数传值,并且存储过程体中并没有诸如
set @out_val=0的显式为 输出参数 赋值的语句(使用 set @out_val=@out_val+1 是不行的 ),那么在执行完存储过程后,输出参数的带回值是NULL 。这一点我在使用C#的调用中遇到了,还让我调试程序好久。后来在SQL Serve 查询分析器了看到NULL 才恍悟。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值