参数标记(数据库引擎)

基于 ADO、OLE DB 和 ODBC 的数据库 API 支持参数标记。参数标记是位于 Transact-SQL 语句的输入表达式或输出表达式中的问号 (?)。当使用不同的输入和输出表达式值多次执行同一条 Transact-SQL 语句时,可使用参数标记对应用程序进行优化。

例如,用户可能赋予应用程序五个不同的股票代码,并且该应用程序必须调用获取每种股票当前数据的存储过程。应用程序可以执行下列过程:

  • 准备以下 Transact-SQL 语句:

    EXEC GetQuoteProcedure @StockSymbolParameter = ?
    
  • 将应用程序变量绑定到参数标记 (?)。

  • 执行循环:

    1. 将下一个股票代码移到绑定的变量。

    2. 执行语句以检索该股票的报价。

参数标记不仅可以映射到存储过程参数。可以在使用输入表达式的任何位置上使用参数标记,例如:

UPDATE HumanResources.Employees
SET Title = ?
WHERE EmployeeID = ?

而且,参数标记还可以用于映射存储过程输出参数和返回代码。当应用程序执行存储过程时,OLE DB 访问接口或 ODBC 驱动程序将从任何输出参数或返回代码中把数据值移到绑定到参数标记的变量中。

例如,应用程序可以执行下列过程。此过程将返回整数返回代码和字符输出参数。

  1. 准备语句:

    {? = CALL MyProc (?)}
    
  2. 将第一个参数标记绑定到整数变量,将第二个绑定到字符数组。

  3. 执行语句。

  4. 提取或取消存储过程所返回的所有结果集。

此时,SQL Server 的 Microsoft OLE DB 访问接口或 SQL Server ODBC 驱动程序将把返回代码和输出参数值放置在绑定的变量中。Microsoft SQL Server 将输出参数值和返回代码值返回到它上次返回到客户端的数据包中。因此,应用程序必须处理或取消存储过程所返回的所有结果集才能访问返回代码和输出参数值。

ADO API 在执行存储过程这一进程中有所不同。ADO 应用程序执行下列过程:

  1. Command 对象类型设置为 adCmdStoredProc

  2. 将命令文本设置为过程名称。

  3. 生成将所有参数和返回代码绑定到应用程序变量的 Parameters 集合。

  4. 执行 Command 对象。

参数标记与具有特定数据类型的数据库对象相关联。如果应用程序将参数标记绑定到的变量的数据类型与关联的数据库对象的数据类型不同,则 OLE DB 访问接口或 ODBC 驱动程序必须转换数据。例如,如果应用程序将整数返回代码绑定到字符数组,则 OLE DB 访问接口或 ODBC 驱动程序必须将返回代码整数数据转换为字符串。有关支持的数据类型转换的信息,请参阅 OLE DB Provider for SQL Server 和 SQL Server ODBC 驱动程序的文档。