当前位置: 首页 > news >正文

SQLServer存储过程返回值总结

.  存储过程没有返回值的情况(即存储过程语句中没有return 之类的语句)
  用方法 int  count = ExecuteNonQuery(..)执行存储过程其返回值只有两种情况
  (1)假如通过查询分析器执行该存储过程,在显示栏中假如有影响的行数,则影响几行count就是几
  (2)假如通过查询分析器执行该存储过程,在显示栏中假如显示 '命令已成功完成。' 则count = -1;在显示栏中假如有查询结果,则count = -1
总结:A.ExecuteNonQuery()该方法只返回影响的行数,假如没有影响行数,则该方法的返回值只能是-1,不会为0。
       B.不论ExecuteNonQuery()方法是按照CommandType.StoredProcedure或者CommandType.Text执行,其效果和A一样。
---------------------------------------------------------------------------------------------------------------------------------------------------
2.  获得存储过程的返回值--通过查询分析器获得
    (1)不带任何参数的存储过程(存储过程语句中含有 return )
 
  ---创建存储过程
  CREATE PROCEDURE  testReturn
  AS
  return  145
  GO
  ---执行存储过程
  DECLARE @RC int
  exec @RC=testReturn
  select  @RC
  ---说明
  查询结果为145
 
    (2)带输入参数的存储过程(存储过程语句中含有 return )
 
  ---创建存储过程
  create procedure sp_add_table1
   @in_name varchar(100),
   @in_addr varchar(100),
   @in_tel varchar(100)
  as
   if (@in_name = ''  or @in_name is  null )
    return  1
   else
    begin
     insert into  table1(name,addr,tel) values(@in_name,@in_addr,@in_tel)
     return  0
    end
  ---执行存储过程
  <1>执行下列,返回1
  declare @count int  exec @count = sp_add_table1 '' , '中三路' , '123456'  select  @count
  <2>执行下列,返回0
  declare @count int  exec @count = sp_add_table1 '' , '中三路' , '123456'  select  @count
  ---说明
  查询结果不是0就是1
 
    (3)带输出参数的存储过程(存储过程中可以有 return 可以没有 return )
 
  例子A:
  ---创建存储过程
  create procedure sp_output
   @output int  output
  as
   set  @output = 121
   return  1
  ---执行存储过程
  <1>执行下列,返回121
  declare @ out  int
  exec sp_output @ out  output
  select  @ out
  <2>执行下列,返回1
  declare @ out  int
  declare @count int
  exec @count = sp_output @ out  output
  select  @count
  ---说明
  return ,只要查询输出参数,则查询结果为输出参数在存储过程中最后变成的值;只要不查询输出参数,则查询结果为 return 返回的值
 
  例子B:
  ---创建存储过程
  create procedure sp_output
   @output int  output
  as
   set  @output = 121
  ---执行存储过程
  <1>执行下列,返回121
  declare @ out  int
  exec sp_output @ out  output
  select  @ out
  <2>执行下列,返回0
  declare @ out  int
  declare @count int
  exec @count = sp_output @ out  output
  select  @count
  ---说明
  没有 return ,只要查询输出参数,则查询结果为输出参数在存储过程中最后变成的值;只要不查询输出参数,则查询结果为0
  
总结:
  (1)存储过程共分为3类:
   A.返回记录集的存储过程---------------------------其执行结果是一个记录集,例如:从数据库中检索出符合某一个或几个条件的记录
   B.返回数值的存储过程(也可以称为标量存储过程)-----其执行完以后返回一个值,例如:在数据库中执行一个有返回值的函数或命令
   C.行为存储过程-----------------------------------用来实现数据库的某个功能,而没有返回值,例如:在数据库中的更新和删除操作
  (2)含有 return 的存储过程其返回值为 return 返回的那个值
  (3)没有 return 的存储过程,不论执行结果有无记录集,其返回值是0
  (4)带输出参数的存储过程:假如有 return 则返回 return 返回的那个值,假如要 select 输出参数,则出现输出参数的值,于有无 return 无关
---------------------------------------------------------------------------------------------------------------------------------------------------
3.获得存储过程的返回值--通过程序获得
---------------------------------------------------------------------------------------------------------------------------------------------------
SqlParameter[] cmdParms = { .. , new  SqlParameter( "@return" ,SqlDbType.Int)};
cmdParms[cmdParms.Length - 1].Direction = ParameterDirection.ReturnValue;或者
cmdParms[cmdParms.Length - 1].Direction = ParameterDirection.Output或者
cmdParms[cmdParms.Length - 1].Direction = ParameterDirection.Input;
 
得到返回值 object  bj = cmdParms[cmdParms.Length - 1].Value;
分类: MSMQ
 
 
本文转自左正博客园博客,原文链接: http://www.cnblogs.com/soundcode/p/6810712.html,如需转载请自行联系原作者

相关文章:

  • 算法笔记--中国剩余定理
  • 创建Kafka0.8.2生产者与消费者
  • IDEA在编辑时提示could not autowire
  • linux 使用记录
  • 关于ashx不可重定向问题
  • 有关“树上剩余几只鸟”的问题的思考及解答
  • 可以放在页面任何地方de 天气插件
  • yum安装指定版本的软件包的方法
  • 探秘Spring AOP (三) Spring AOP 使用讲解 2
  • 基于java config的springSecurity(四)--启用全局方法安全
  • 黑客预警:搞瘫北美互联网?规模更大的僵尸网络现身
  • 一个关于ConfigurationManager.GetSecion方法的小问题
  • 基础大概回顾
  • 重新学习Mysql数据库3:Mysql存储引擎与数据存储原理
  • P1679 神奇的四次方数
  • php的引用
  • 07.Android之多媒体问题
  • 0基础学习移动端适配
  • eclipse(luna)创建web工程
  • ECMAScript 6 学习之路 ( 四 ) String 字符串扩展
  • HashMap ConcurrentHashMap
  • interface和setter,getter
  • MySQL QA
  • node.js
  • orm2 中文文档 3.1 模型属性
  • React 快速上手 - 07 前端路由 react-router
  • React-flux杂记
  • Solarized Scheme
  • Vue 重置组件到初始状态
  • 前端知识点整理(待续)
  • 删除表内多余的重复数据
  • 温故知新之javascript面向对象
  • 无服务器化是企业 IT 架构的未来吗?
  • 转载:[译] 内容加速黑科技趣谈
  • ​LeetCode解法汇总2670. 找出不同元素数目差数组
  • ​如何防止网络攻击?
  • (day 2)JavaScript学习笔记(基础之变量、常量和注释)
  • (done) NLP “bag-of-words“ 方法 (带有二元分类和多元分类两个例子)词袋模型、BoW
  • (TipsTricks)用客户端模板精简JavaScript代码
  • (附源码)springboot优课在线教学系统 毕业设计 081251
  • (理论篇)httpmoudle和httphandler一览
  • (十)【Jmeter】线程(Threads(Users))之jp@gc - Stepping Thread Group (deprecated)
  • (算法设计与分析)第一章算法概述-习题
  • (原創) 如何使用ISO C++讀寫BMP圖檔? (C/C++) (Image Processing)
  • (转)EOS中账户、钱包和密钥的关系
  • (转)Java socket中关闭IO流后,发生什么事?(以关闭输出流为例) .
  • ****** 二 ******、软设笔记【数据结构】-KMP算法、树、二叉树
  • .NET CF命令行调试器MDbg入门(三) 进程控制
  • .net core webapi 大文件上传到wwwroot文件夹
  • .NET Core 将实体类转换为 SQL(ORM 映射)
  • .Net Core 中间件验签
  • .net FrameWork简介,数组,枚举
  • .net6使用Sejil可视化日志
  • .ui文件相关
  • ??javascript里的变量问题