以下存储过程(伪代码):

  1. -- 伪代码,假设相关操作是成功的
  2. alter procedure pr_test
  3. as
  4. begin
  5. set nocount on
  6.  
  7. update tab set col='newvalue' --update操作
  8.  
  9. select * from tab --select查询,返回结果集
  10.  
  11. exec pr_test_2 --exec执行存储过程,一系列的操作,可能返回结果集
  12.  
  13. insert into tab --insert操作
  14. select *
  15. from temp
  16.  
  17. select * from temp --select查询2,返回结果集
  18.  
  19. delete * from temp --delete操作
  20.  
  21. end
  22. go

站在sqlserver客户端的角度 (sql引擎外面),究竟是如何执行的呢?

个人的研究心得:

  1. sql引擎仍是机械的一步一步执行,运行存储过程和直接运行sql语句的不同在于执行的上下文环境(变量、自动执行下一步指令)有所不同。所以,客户端必须是(1)等待每一步的执行,如果不需要客户端介入处理结果集;(2)处理结果集:展示or丢弃;(3)下达存储过程执行的中断命令:杀死会话or主动反应(处理结果集or丢弃结果集)
  2. 存储过程作为一个完整的代码单元,起最终会有一个执行的状态(return状态):(1)正常的或默认的return 0;(2)手工的return n;(3)执行异常终止,sql引擎抛出的错误代码
  3. 存储过程内的顺序很重要,因为每一步都要按处理流程执行和等待反馈。特别的select返回结果集,不同的客户端或编程接口行为会不同:sqlserver自己的查询分析器或企业管理器仅仅是客户端的一种,它的表现行为不代表其他客户端或编程接口也是同样

存储过程返回多个结果集的问题:

sqlserver自身的查询分析器很好的表现!!

php对多个结果集进行处理:默认取得第一个结果集的句柄,其他的必须通过 odbc_next_result($resultset) 来遍历,而且必须要遍历!否则会出现错误严重的错误 “[Microsoft][ODBC SQL Server Driver]连接占线导致另一个 hstmt”

如果仅仅关心默认的第一个结果集,可以在程序后面加入来释放占用的连接资源

  1. while(odbc_next_result($rows)){;}

Sqlserver2005:深入了解php执行sqlserver存储过程procedure:odbc_exe、odbc_execute的更多相关文章

  1. asp.net执行SqlServer存储过程!(详解!)

    ASP.NET执行存储过程 一. 执行一个没有参数的存储过程的代码如下: connectionString为连接字符串 SqlConnection conn=new SqlConnection(con ...

  2. 解剖SQLSERVER 第十五篇 SQLSERVER存储过程的源文本存放在哪里?(译)

    解剖SQLSERVER 第十五篇  SQLSERVER存储过程的源文本存放在哪里?(译) http://improve.dk/where-does-sql-server-store-the-sourc ...

  3. SqlServer存储过程学习笔记(增删改查)

    * IDENT_CURRENT 返回为任何会话和任何作用域中的特定表最后生成的标识值. CREATE PROCEDURE [dbo].[PR_NewsAffiche_AddNewsEntity] ( ...

  4. 创建并在项目中调用SQLSERVER存储过程的简单示例

    使用SQLSERVER存储过程可以很大的提高程序运行速度,简化编程维护难度,现已得到广泛应用.创建存储过程 和数据表一样,在使用之前需要创建存储过程,它的简明语法是: 引用: Create PROC ...

  5. SQLSERVER存储过程语法详解

    CREATE PROC [ EDURE ] procedure_name [ ; number ] [ { @parameter data_type } [ VARYING ] [ = default ...

  6. SQLServer 存储过程+定时任务发邮件

    SQLServer 代理发邮件需要开启SQL Server 代理服务器,然后,在[管理]-[数据库邮件]中,右键点击配置数据库邮件. 我用的是腾讯的企业邮箱,个人的163邮箱略微不同.下图是相关邮件的 ...

  7. SqlServer存储过程(增删改查)

    * IDENT_CURRENT 返回为任何会话和任何作用域中的特定表最后生成的标识值. CREATE PROCEDURE [dbo].[PR_NewsAffiche_AddNewsEntity] ( ...

  8. SQLSERVER存储过程的基本语法实例

    SQLSERVER存储过程的基本语法实例 SQLSERVER存储过程的基本语法实例 一.定义变量--简单赋值 declare @a intset @a=5 print @a --使用select语句赋 ...

  9. 数据库之存储过程Procedure

    数据库之存储过程 一.概述 SQLserver中视图通过简单的select查询来解决复杂的查询,但是视图不能提供业务逻辑功能,而存储过程可以办到. 二.什么是存储过程 存储过程procedure是一组 ...

随机推荐

  1. NSArray的排序方法

    转自:http://blog.csdn.net/lixuwen521/article/details/7848893 1.sortedArrayUsingSelector (按Key值大小对NSDic ...

  2. 使用vim-latex排版

    前几天在某个群上看到了一篇简历,内容不重要,一看排版很漂亮的说.一问才知道是用latex排版工具排版的.一想到我都大三下学期的,也快大四了,是不是要准备一份简历.于是就想使用latex这个排版工具来排 ...

  3. dp之分组背包hdu3535(推荐)

    题意:有0,1,2三种任务,0任务中的任务至少得完成一件,1中的任务最多完成1件,2中的任务随便做.每一个任务最多只能做一次 .n代表有n组任务,t代表有t分钟,m代表这组任务有m个子任务,s代表这m ...

  4. 基于jQuery在线问卷答题系统代码

    分享一款基于jQuery在线问卷答题系统代码是一款实用的jQuery答题插件,点击下一题切换带有淡入淡出效果.实现的效果图如下: 在线预览   源码下载 实现的代码. html代码: <div ...

  5. HttpClient-4.3.X 中get和post方法使用

    转自:http://linhongyu.blog.51cto.com/6373370/1538672 一.简介 HttpClient是Apache Jakarta Common下的子项目,用来提供高效 ...

  6. 【C#】解析XML

    最近在尝试用WPF搞点桌面小应用. C#中使用System.Xml.XmlDocument类对XML文件进行操作. 文档详情如下: https://msdn.microsoft.com/en-us/l ...

  7. oozie中调度mapreduce

    mapreduce可以直接对hdfs进行清洗和计算,这里介绍oozie中如何调度使用. 操作步骤如下: 1. 写一个mapper和reduce类,并且打包成jar包 2. 在workflow中引用ma ...

  8. [转]RosBridge小结

    1.rosbridge介绍 rosbridge(rosbridge_suite)是ros官方为开发者提供的一个用于非ros系统和ros系统进行交互通信的功能包.rosbridge主要包含两个部分,Ro ...

  9. 第一关练习题统计网站最大访问量sed法,隐藏知识数组下标不能重复

    1.1.1 获取日志的最大top10,排序 获取两列到新的文件中第一次处理 sed截取字符串中间的内容,sed不支持贪婪匹配.找出图片在的列和图片大小到test1文件 本题需要输出三个指标:[访问次数 ...

  10. laravel bald视图控制流与子视图

    1:laravel 视图控制流的写法 假设控制器代码如下 $data = [ 0 => '张三', 1 => '李四', 2 => '王五' ]; return view('test ...