科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道SQL Server查询处理器机制与结构(中)(2)

SQL Server查询处理器机制与结构(中)(2)

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

下面我们将讨论当客户机应用程序与 SQL Server 交互时客户机的动作。以下是一个 ODBC 调用的例子

作者:ChinaITLab 来源:ChinaITLab 2007年9月6日

关键字: 处理器 SQL Server SQL Server 各版本 数据库

  • 评论
  • 分享微博
  • 分享邮件
 

在 SQL Server 6.5 中,由于没有本机接口,需要模拟准备和执行两个阶段。可以通过下面的两种方法做到这一点。在第一种方法中,不会真正出现准备阶段。只有执行部分返回元数据(有一些选项可以做到这一点),所以 SQL Server 可以把结果的格式描述返回给应用程序。在第二种方法中,SQL Server 实际上创建一个特定存储过程,这个过程是单个用户私用的,不能共享计划。这第二种方法可能会占满 tempdb 数据库的空间,因此大多数应用程序开发人员都通过 ODBC 配置对话框中的复选框,关闭此选项,以使用第二种方法。

在 SQL Server 7.0 中,准备/执行方法是 SQL Server 的本机功能。准备好 SQL 语句之后,才会执行它。至于默认的结果集,应用程序只需要调用 sp_execute,提供准备操作生成的句柄,语句就会被执行。对于游标,与其他游标处理过程看起来很相似,事实上,它也具有相同的特性,包括如果游标是快速只前向型,还可以使用 autofetch 和 toclose。

准备/执行操作的流程如图 5 所示。

SQL Server查询处理器机制与结构(中)(2)
   

图 5. 准备/执行模型

调用存储过程

存储过程一般是从 ODBC 和 OLE-DB,通过发送 SQL 语句给使用 ODBC 标准 CALL 语法调用过程的 SQL Server 来调用。其应类似于以下语句:

  SQLExecDirect(hstm, "{call addorder(?)}", SQL_NTS)
 
 

对于默认结果集,这是一个简单的流,因为这正是 RPC 消息原本要处理的对象。客户机向服务器发送 RPC 消息,并获取来自存储过程的处理结果。如果是游标,则情况稍微复杂一些,客户机需要调用 Sp_cursoropen,就像其他游标一样。Sp_cursoropen 含有内部逻辑,检测该存储过程是否只包含一条 SELECT 语句。如果是,则对该 SELECT 语句打开一个游标。如果该存储过程中不是一条 SELECT 语句,则客户机会得到一个指示,说明"我们为您打开结果集,但是我们将以流水的方式返回数据流,您可以把这个数据流提供给用户"。

存储过程执行流程如图 6 所示。

SQL Server查询处理器机制与结构(中)(2)
   

图 6. 调用存储过程

SQL Manager

前面已经提到过的 SQL Manager 驱动很多服务器处理过程,它实际上是服务器的心脏。SQL Manager 处理所有调用存储过程的请求,管理过程缓存,拥有虚拟系统存储过程,在稍后要介绍的特定查询的自动参数化过程中也要涉及。如果您有与本文类似的描述 SQL 6.5 或更老版本的文章,则不会读到有关 SQL 管理器的讨论,然而,您会读到一些完成 SQL 管理器工作的一些不同的组件。但是在 SQL Server 7.0 中,这些组件被统一为 SQL 管理器,通过系统驱动查询语句的处理。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章