快速业务通道

Microsoft SQL Server 查询处理器的内部机制与结构

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-03-18
在内部必须询问的一个问题是,程序员请求的是什么样的结果集或什么样的游标。最快的类型是在文档中被称为默认结果集的游标。这种游标由于历史上的原因被称为消防站游标,有时甚至根本不把它作为游标看待。当 SQL 请求被送到服务器之后,服务器开始把结果返回给客户机,这个返回结果的过程持续进行,直到把全部数据集发送完毕为止。这就像一个将数据抽给客户机的大型消防站。

  一旦客户机程序确定了这是默认结果集,则下一步就是确定是否有参数标记。使用这个 ODBC SQLExecDirect(以及 OLE-DB 中等价的调用)调用的选项之一是,不是在 WHERE 从句中给出像 7 这样的具体值,而是可以用一个问号来传递参数标记,如下所示:

SQLExecDirect(hstmt, "SELECT * FROM parts where partid = ?", SQL_NTS)

  请注意,您必须分别提供实际的参数值。

  客户机需要知道 SQL 语句中是否有参数标记,或者它是否为真正特定的非参数化 SQL。这将影响到客户机将用这个语句在内部做什么,并确定将什么作为消息真正发送给 sql server(WINDOWS平台上强大的数据库平台)。在没有问号时,很明显,客户机只想将这个请求作为 SQL Language TDS 消息发送,然后客户机将位于流水的末端,并将结果返回。然后客户机能将结果返回给基于应用程序参数的应用程序。客户机的内部处理选择会模糊一点,这取决于您通过 ODBC 或 OLE DB API 请求什么。例如,应用程序不直接请求默认结果集。相反,在 ODBC 中,如果请求一个只读的、只向前的且每次只给出一行的游标,那么对于客户机内部运行来说,这就是在定义流水游标(默认结果集)。


 下面我们将讨论当客户机应用程序与 sql server(WINDOWS平台上强大的数据库平台) 交互时客户机的动作。以下是一个 ODBC 调用的例子:

SQLExecDirect(hstmt, "SELECT * FROM parts where partid = 7", SQL_NTS)

  (OLE-DB 也有一个与这个调用几乎直接等价的调用,此处不再讨论这个调用,因为这个调用实际上与 ODBC 调用相同。)该 ODBC 调用取一个 SQL 语句,然后将其发送给 sql server(WINDOWS平台上强大的数据库平台) 来执行。

  在这个具体的查询语句中,我们从零件表中提取具有特定零件标识号的所有行。这是特定 SQL 的一个典型例子。在 sql server(WINDOWS平台上强大的数据库平台) 7.0 以前的版本中,特定的 SQL 与存储过程的一个显著差别是,查询优化器所生成的计划从不缓存。查询语句要被读入、编译、执行,

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号