WEB开发网
开发学院数据库MSSQL Server Microsoft SQL Server 查询处理器的内部机制与结构... 阅读

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

 2006-08-05 09:14:50 来源:WEB开发网   
核心提示: SQLExecDirect(hstmt, "SELECT * FROM parts where partid = ?", SQL_NTS)请注意,您必须分别提供实际的参数值,Microsoft SQL Server 查询处理器的内部机制与结构(9),客户机需要知道 SQ
SQLExecDirect(hstmt, "SELECT * FROM parts where partid = ?", SQL_NTS)

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

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

流水游标有一个主要问题。除非客户机已将所有的行全部接收完毕,客户机不能将任何其他 SQL 语句向下发送给服务器。因为结果集可能有很多行,所以有些应用程序使用流水游标时不能顺利运行。后面将要描述的只向前的快速游标,是 SQL Server 7.0 版的一个新特点,尤其适合于处理这种情况。

在 SQL Server 7.0 版之前,SQLExecDirect 调用在很大程度上是以相同方式处理的,而不管是否用参数标记来代替常数。如果您定义一个参数标记,客户机将实际取您通过不同调用提供的值(本节的开始示例中的值“7”),并将它插入问号处。然后,使用代替值的新语句被向下发送,作为一个特定的 SQL 语句。在服务器上使用参数化的 SQL 没有任何好处。

然而,在 SQL Server 7.0 版中,如果 SQLExecDirect 使用了参数标记,向下发送给 SQL Server 的 TDS 消息便不是 SQL 语言消息。相反,它被下发给使用 sp_executesql 过程的服务器,所以,就 TDS 协议来说,它是 RPC。在客户机上,结果基本上相同。客户机将取回数据流水。

上一页  4 5 6 7 8 9 10  下一页

Tags:Microsoft SQL Server

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接