使用语句参数 - 绑定参数

适用于:SQL Server Azure SQL 数据库 Azure SQL 托管实例 Azure Synapse Analytics Analytics Platform System (PDW)

SQL 语句中的每个参数标记都必须关联或绑定到应用程序中的变量,然后才能执行该语句。 这是通过调用 SQLBindParameter 函数完成的SQLBindParameter 描述驱动程序的程序变量(地址、C 数据类型等)。 它还通过指示其序数值来标识参数标记,然后描述它所表示的 SQL 对象的特点(SQL 数据类型、精度等)。

在执行语句前,可以随时绑定或重新绑定参数标记。 直到发生下列事件之一时,参数绑定才会失效:

  • 调用 SQLFreeStmt 并将 Option 参数设置为SQL_RESET_PARAMS释放绑定到语句句柄的所有参数。

  • 将 ParameterNumber 设置为绑定参数标记序号的 SQLBindParameter 的调用会自动释放以前的绑定。

应用程序还可以将参数绑定到程序变量数组,以批量处理 SQL 语句。 数组绑定有两种不同的类型:

  • 当每个参数绑定到自身的变量数组时,将完成按列绑定。

    通过调用属性设置为“SQL_ATTR_PARAM_BIND_TYPE”的 SQLSetStmtAttr将 ValuePtr 设置为SQL_PARAM_BIND_BY_COLUMN来指定列式绑定。

  • 当 SQL 语句中的所有参数作为一个单元绑定到包含这些参数的各个变量的结构数组时,将完成按行绑定。

    通过将属性设置为SQL_ATTR_PARAM_BIND_TYPE的 SQLSetStmtAttr 调用 SQLSetStmtAttr,并将 ValuePtr 设置为包含程序变量的结构的大小来指定行绑定。

当 SQL Server Native Client ODBC 驱动程序向服务器发送字符或二进制字符串参数时,它将值填充到 SQLBindParameter ColumnSize 参数中指定的长度。 如果 ODBC 2.x 应用程序为 ColumnSize 指定 0,驱动程序会将参数值填充到数据类型的精度。 连接到 SQL Server 服务器时精度为 8000,连接到早期版本的 SQL Server 时为 255。 ColumnSize 是变体列的字节数。

SQL Server 支持定义存储过程参数的名称。 ODBC 3.5 还引入了对调用 SQL Server 存储过程时使用的命名参数的支持。 此支持可用于:

  • 调用存储过程,并向为该存储过程定义的参数的子集提供值。

  • 以不同于创建存储过程时指定的顺序指定应用程序中的参数。

仅当使用 Transact-SQL EXECUTE 语句或 ODBC CALL 转义序列执行存储过程时,才支持命名参数。

如果为存储过程参数设置了SQL_DESC_NAME,查询中的所有存储过程参数也应SQL_DESC_NAME设置。 如果在存储过程调用中使用文本,其中参数已设置SQL_DESC_NAME,则文本应使用格式“name=value”,其中名称是存储过程参数名称(例如@p1)。 有关详细信息,请参阅 按名称(命名参数)绑定参数。

另请参阅

使用语句参数