使用语句参数 - 绑定参数

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

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

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

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

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

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

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

    按列绑定是通过调用 SQLSetStmtAttr 指定, 其中 Attribute 设置为 SQL_ATTR_PARAM_BIND_TYPE, ValuePtr 设置为 SQL_PARAM_BIND_BY_COLUMN。

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

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

当SQL Server Native Client ODBC 驱动程序将字符或二进制字符串参数发送到服务器时,它会将值填充到 SQLBindParameterColumnSize 参数中指定的长度。 如果 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”,其中 name 是存储过程参数名称 (例如 @p1)。 有关详细信息,请参阅 按名称绑定参数 (命名参数)

另请参阅

使用语句参数