ADO、OLE DB 和基于 ODBC 的数据库 API 支持参数标记。参数标记是放置在 Transact-SQL 语句中输入或输出表达式位置的一个问号 (?)。对于要多次执行的同一 Transact-SQL 语句,但用于其输入和输出表达式的值不同的情况,参数标记使应用程序得以进行优化。
例如,用户可能给应用程序提供了五个不同的 stock 标记,并且应用程序必须调用存储过程来获得每个 stock 当前的数据。应用程序可以:
EXEC GetQuoteProcedure @StockSymbolParameter = ?
参数标记不仅可以用于映射到存储过程参数。它们还可以用于任何使用输入表达式的地方:
UPDATE Employees
SET Title = ?
WHERE EmployeeID = ?
而且,参数标记可以用于映射存储过程输出参数和返回代码。应用程序执行存储过程时,OLE DB 提供程序或 ODBC 驱动程序将数据值从任意输出参数或返回代码移动到该参数标记所绑定的变量中。例如,应用程序可以执行下列进程,该进程将返回一个整数返回代码和一个字符输出参数:
{? = CALL MyProc (?)}
此时,用于 SQL Server 的 Microsoft OLE DB 提供程序或 SQL Server ODBC 驱动程序会将返回代码和输出参数值放置在绑定的变量中。在返回给客户端的最后一个数据包中,Microsoft® SQL Server™ 返回输出参数和返回代码。因此,只有在应用程序处理或取消存储过程所返回的所有结果集后,才可以访问返回代码和输出参数值。
此进程中,ADO API 执行存储过程可以有变化。ADO 应用程序可以:
参数标记与具有特定数据类型的数据库对象相关联。如果应用程序将参数标记绑定到某个变量,而此变量的数据类型与相关的数据库对象不同,则 OLE DB 提供程序或 ODBC 驱动程序必须转换数据。例如,如果应用程序将整数返回代码绑定到字符数组,则 OLE DB 提供程序或 ODBC 驱动程序必须将返回代码整数数据转换为字符串。有关支持的数据类型转换的信息,请参见用于 SQL Server 的 OLE DB 提供程序和 SQL Server ODBC 驱动程序的文档。