教你轻松掌握参数和执行计划的重新使用

来源:岁月联盟 编辑:zhuzhu 时间:2007-10-19

使用参数(包括 ADO、OLE DB 和 ODBC 应用程序中的参数标记)可以增加重新使用执行计划的机会。

下面两个 SELECT 语句的唯一区别是 WHERE 子句中的比较值:

SELECT * FROM Northwind.dbo.Products WHERE CategoryID = 1SELECT * FROM Northwind.dbo.Products WHERE CategoryID = 4

这两个查询的执行计划的唯一区别是为比较 CategoryID 列而存储的值。虽然 SQL Server 2000 的目标是始终承认语句生成的计划在本质上相同并重新使用这些计划,但是 SQL Server 有时在复杂的 SQL 语句中检测不到这一点。

使用参数将常量与 SQL 语句分开有助于关系引擎识别重复计划。可以按下列方式使用参数:

·在 Transact-SQL 中,使用 sp_executesql: DECLARE @MyIntParm INTSET @MyIntParm = 1EXEC sp_executesql  N'SELECT * FROM Northwind.dbo.Products WHERE CategoryID = @Parm',  N'@Parm INT',  @MyIntParm

这一方法最适于 Transact-SQL 脚本、存储过程或动态生成 SQL 语句的触发器。

·ADO、OLE DB 和 ODBC 使用参数标记。参数标记是问号 (?),在 SQL 语句中替代常量并绑定到程序变量。例如,在 ODBC 应用程序中:

·使用 SQLBindParameter 将整型变量绑定到 SQL 语句中的第一个参数标记上。

·在变量中放入整型值。

·执行语句,并指定参数标记 (?):

SQLExecDirect(hstmt, "SELECT * FROM Northwind.dbo.Products WHERE CategoryID = ?",SQL_NTS);

在应用程序中使用参数标记时,随 SQL Server 2000 提供的用于 SQL Server 的 Microsoft OLE DB 提供程序和 SQL Server ODBC 驱动程序都使用 sp_executesql 将语句发送到 SQL Server 2000。

(责任编辑:卢兆林)