SQLPrepare

SQL Server Native Client ODBC 驱动程序基于准备好的 SQL 语句创建临时存储过程。存储过程是多次执行某个语句的有效方式,不过创建存储过程的开销要比执行简单语句高。一般规则是,如果应用程序将要提交 SQL 语句超过三次,请考虑使用 SQLPrepareSQLExecute

注意注意

SQL Server 支持 ODBC 的准备/执行模型。在此介绍的 SQLPrepare/SQLExecute 行为仅适用于 SQL Server 7.0 之前的版本。

SQLPrepare 创建的临时存储过程名为 **#odbc#**useridentifier,其中 useridentifier 是至多六个字符的用户名,与用于标识过程的至多八位数字连在一起。

如果所有参数值均已绑定或者 SQL 语句不包含参数,SQLPrepare 将创建临时存储过程。如果调用 SQLPrepare 时所有参数值均未绑定,SQLExecute 将创建过程。

SQLPrepare 可比 SQLExecute 更有效地创建存储过程,所以我们建议在调用 SQLPrepare 之前使用 SQLBindParameter 绑定参数变量。

如果用于生成临时存储过程的 CREATE PROCEDURE 语句返回错误,SQLPrepareSQLExecute 将向 SQL Server 提交启用 SET NOEXEC 或 SET PARSEONLY 选项的语句(具体取决于语句类型)。SQL Server 检查该语句的语法并返回任何错误。

SQLExecute 可以返回 SQLPrepare 可返回的任何 ODBC SQLSTATE 和任何 SQL Server 错误。

如果 InputOutputTypeParameterTypeColumnSizeDecimalDigits 的值在调用准备的语句中的 SQLBindParameter 时发生更改,SQL Server Native Client ODBC 驱动程序将创建新的临时存储过程。在以下情况下不会创建新的临时存储过程:绑定参数指向客户端内存中的新缓冲区、客户端内存的长度发生更改,或是指向该参数的长度或指示器值的指针发生更改。

如果出于某种原因连接无法创建存储过程(如缺少权限),SQL Server Native Client ODBC 驱动程序不使用存储过程,但会在每次调用 SQLExecute 时提交 SQL 语句。

默认情况下,SQL Server Native Client ODBC 驱动程序会在连接中断(为连接调用 SQLDisconnect)时删除临时存储过程。这可能会在期望无限期保持连接时造成问题。使用驱动程序特定的连接选项 SQL_USE_PROCEDURE_FOR_PREPARE 可以更改默认行为。

注意注意

如果已经执行 SET NOCOUNT ON,存储过程内嵌的多个语句不会创建它们应该创建的多个结果集。驱动程序忽略存储过程中的 SQL 语句所生成的行计数。

请参阅

概念

其他资源