ISO 选项的作用

ODBC 标准与 ISO 标准十分相似,而且 ODBC 应用程序期望 ODBC 驱动程序能提供标准行为。为了使其行为更紧密地符合 ODBC 标准中定义的行为,SQL Server Native Client ODBC 驱动程序总是会使用它所连接的 SQL Server 版本中可用的任何 ISO 选项。

当 SQL Server Native Client ODBC 驱动程序连接到 SQL Server 实例时,服务器会检测客户端是否正在使用 SQL Server Native Client ODBC 驱动程序并打开若干选项。

驱动程序将自己发出这些语句;ODBC 应用程序不会做任何工作以请求它们。设置这些选项可提高使用驱动程序的 ODBC 应用程序的可移植性,因为服务器的行为将与 ISO 标准保持一致。

基于 DB-Library 的应用程序通常不会打开这些选项。观察到 ODBC 或 DB-Library 客户端在运行相同 SQL 语句时存在不同行为的站点不会将此视为 SQL Server Native Client ODBC 驱动程序存在的问题。它们会首先在 DB-Library 环境中使用与 SQL Server Native Client ODBC 驱动程序会使用的 SET 选项相同的选项来重新运行该语句。

由于用户和应用程序可能会随时打开和关闭 SET 选项,存储过程和触发器的开发人员还应分别在上面列出的 SET 选项处于打开和关闭状态的情况下对其存储过程和触发器进行认真测试。这可以确保存储过程和触发器正常工作,而无论特定连接在调用过程和触发器时打开哪些选项。如果存储过程或触发器需要对这些选项之一进行特殊设置,则应该在触发器或存储过程的开始处发出 SET 语句。此 SET 语句仅在触发器或存储过程执行期间保持有效;过程或触发器结束后,即会还原原始设置。

在连接到 SQL Server 实例时,还会打开第四个 SET 选项 (CONCAT_NULL_YIELDS_NULL)。如果在数据源中或在 SQLDriverConnectSQLBrowseConnect 上指定了 AnsiNPW=NO,则 SQL Server Native Client ODBC 驱动程序不会打开这些选项。

与前面所述的 ISO 选项类似,如果在数据源中或者在 SQLDriverConnectSQLBrowseConnect 上指定了 QuotedID=NO,则 SQL Server Native Client ODBC 驱动程序不会打开 QUOTED_IDENTIFIER 选项。

若要使驱动程序能够了解 SET 选项的当前状态,ODBC 应用程序不应使用 Transact-SQL SET 语句设置这些选项。它们只应使用数据源或连接选项设置这些选项。如果应用程序发出 SET 语句,则驱动程序可能会生成错误的 SQL 语句。