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

-- 伪代码,假设相关操作是成功的
alter procedure pr_test
as
begin
set nocount on update tab set col='newvalue' --update操作 select * from tab --select查询,返回结果集 exec pr_test_2 --exec执行存储过程,一系列的操作,可能返回结果集 insert into tab --insert操作
select *
from temp select * from temp --select查询2,返回结果集 delete * from temp --delete操作 end
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”

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

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. vim环境配置

    ctags ctags对浏览代码非常的方便,可以在函数.变量之间跳来跳去等等. 下载 下载路径:http://ctags.sourceforge.net/ 我已经下载过了,路径:/home1/fuju ...

  2. 在Windows上开发PHP扩展模块

    环境: window + php + apache + vc6 + cygwin 下载:php二进制文件: php-5.3.10-Win32-VC9-x86        php源码包:php-5.3 ...

  3. How to Reuse Old PCs for Solr Search Platform?

    家裡或公司的舊電腦不夠力? 效能慢到想砸爛它們? 朋友或同事有電腦要丟嗎? 我有一個廢物利用的方法, 我收集了四台舊電腦, 組了一個Fully Distributed Mode的Hadoop Clus ...

  4. Windows10 64位 Python2.7 Matplotlib安装

    为了安装Matplotlib 百度了一大堆,也下载了一大堆安装包,结果还是报错ImportError: DLL load failed: %1 不是有效的 Win32 应用程序. 后来直接从官网看怎么 ...

  5. WCF寄宿到Windows Service

    WCF寄宿到Windows Service[1] 2014-06-14 WCF寄宿到Windows Service参考 WCF寄宿到Windows Service 返回 在前面创建一个简单的WCF程序 ...

  6. Failed to stop Abandoned connection cleanup thread

    刚才在测试一个用户登录程序的时候,是这么一个情况,在login.jsp登录之后,跳转到success.jsp页面 然后我修改了一个servlet,重新deploy到/WEB-INF/classes下( ...

  7. FreeRTOS基础篇教程目录汇总

    以下教程(大部分章节)(尤其理论介绍部分)转载自安富莱电子,官网链接: http://forum.armfly.com/forum.php 然后根据安富莱的教程自己做了分析和测试,希望大家共同进步. ...

  8. cocos2dx坐标系介绍

    GL坐标系 Cocos2D以OpenglES为图形库,所以它使用OpenglES坐标系.GL坐标系原点在屏幕左下角.x轴向右.y轴向上. 屏幕坐标系 苹果的Quarze2D使用的是不同的坐标系统,原点 ...

  9. datagrid中reoload提交时如何批量提交表单中的查询条件

    看标题描述有点复杂,看下图: 直接将手工添加的一个个字段直接用一句代码完成. $('#dg_sub').datagrid("reload",$('#searchForm').ser ...

  10. Java NIO使用及原理分析 (四)(转)

    在上一篇文章中介绍了关于缓冲区的一些细节内容,现在终于可以进入NIO中最有意思的部分非阻塞I/O.通常在进行同步I/O操作时,如果读取数据,代码会阻塞直至有 可供读取的数据.同样,写入调用将会阻塞直至 ...