SQL Server 驱动程序

对所有用户

下列主题讨论 SQL Server 驱动程序，以及如何安装它们，以便为应用程序使用。

概述

硬件和软件需求

设置 SQL Server 驱动程序

增加，修改，和删除 SQL Server 数据来源

连接到 SQL Server 数据来源

释疑

对高级用户

下列主题讨论如何直接使用 SQL Server 驱动程序

连接字符串（ 高级应用 ）

SQL 语句（ 高级应用 ）

数据类型（ 高级应用 ）

错误消息（ 高级应用 ）

对程序员

下列主题讨论如何系统地使用 SQL Server 驱动程序。这些主题适用于应用程序员，并要求他们了解开放式数据库互连（ODBC ）的应用程序接口（API ）。

SQLGetInfo 返回值（编程应用）

ODBC API 函数（编程应用）

主题的执行（编程应用）


概述

请参阅

 SQL Server 是一种在局域网络上执行的多用户关系数据库管理系统（DBMS ）。当 Sybase SQL Server 在各种工作站及计算机操作系统上执行时，Microsoft SQL Server 在 OS/2 及 Windows NT 操作系统上执行。结构化查询语言（SQL ）是用来存取 SQL Server 数据库中的数据。客户端工作站则是经过网络，例如 Microsoft LAN Manager, Novell NetWare, Banyan VINES, 或 TCP/IP 网络等，与 SQL Server 通讯。

有了 SQL Server 驱动程序，应用程序便可经以由[开放式数据库连接（ODBC ）]接口，存取 Microsoft 和 Sybase SQL Server 数据库中的数据。

应用程序／驱动程序的体系结构如下：

应用程序
 |
 ODBC 驱动程序管理器
 （ODBC.DLL）
 |
SQL Server 驱动程序
 （SQLSRVR.DLL）
 |
网络程序库
 （DBNMP3.DLL, DBMSSPX3.DLL, 等）
 |
网络软件
 （Microsoft LAN Manager, Novell NetWare, 等）
 |
 SQL Server DBMS


请参阅

对所有用户

增加，修改，和删除 SQL Server 数据来源

连接到 SQL Server 数据来源

硬件和软件需求

安装 SQL Server 驱动程序


硬件和软件需求

请参阅

要存取 SQL Server 数据时，必须具备：

SQL Server 驱动程序

SQL Server DBMS.

连接计算机的网络，数据常驻于其上。

以下各节描述各构件所需的硬件及软件。

SQL Server 驱动程序

驱动程序需要下列硬件：

工业标准结构（ISA） 计算机，例如 IBM PC/AT 或兼容机种，或者

微通道结构（MCA） 计算机，例如 IBM PS/2 或兼容机种，或者具有 80286, 80386, 或 80486 微处理器的扩充工业标准结构（EISA） 计算机。

2MB 以上的随机存取内存（RAM）；最好是 4 MB 的 RAM。

硬盘，以及供 SQL Server 驱动程序和 ODBC 驱动程序管理器使用的 200 KB 左右的硬盘空间。

SQL Server 驱动程序需要下列软件：

MS-DOS 3.3 或更新的版本

Microsoft Windows 3.0 或更新的版本

ODBC 驱动程序管理器 1.0 或更新的版本（ODBC.DLL）

 SQL Server

要用 SQL Server 驱动程序存取 SQL Server 中的数据时，必须具备 Microsoft SQL Server 1.11 或更新的版本，或Sybase SQL Server 4.0或更新的版本。

分类存储过程必须安装在 SQL Server 的副本中。可能需要将与此驱动程序一起发售的分类存储过程安装在 4.2 及新版的 Microsoft SQL Server for OS/2，以及 Sybase SQL Server 的所有版本上。关于 SQL Server 所需的硬件及软件的相关信息，请参阅 安装分类存储过程  Microsoft SQL Server Configuration Guide  （适用于 Windows NT）,  Microsoft SQL Server Installation Guide  （适用于 OS/2）, 或同等的 Sybase 手册。

网络软件

网络是用来连接 SQL Server 及 SQL Server 驱动程序常驻的平台。要连接 Microsoft SQL Server 时，可以使用 Microsoft Windows for Workgroups; Microsoft LAN Manager 或兼容网络，例如 IBM LAN Server 或 DEC Pathworks; Novell NetWare; or Banyan VINES （适用于 OS/2 ）。要连接 Sybase SQL Server （在各种平台上执行）时，可以用 Novell NetWare 或 Sybase 提供的网络程序库的任何 TCP/IP 网络。

  若需要各网络所需硬件及软件的相关信息，请参阅该网络的文档。DDL SQL Server 驱动程序经过 SQL Server 网络程序库接口与网络软件通讯，并且需要网络程序库动态链结库（DLL）。下表列出可以和 Microsoft SQL Server 各网络一起使用的网络程序库 DLL.

用此

网络 使用其中一个	DLL 和此套装软件一起	发售  Microsoft Windows for Workgroups; Microsoft LAN Manager 及兼容网络，例如 IBM LAN Server 或 DEC Pathworks
DBNMP3.DLL*	SQL Server driver; Microsoft SQL Server	Novell NetWare
DBMSSPX3.DLL	Microsoft SQL Server for Windows NT; Network Integration Kit for Novell  NetWare （for OS/2）	DBNMP3.DLL*
	SQL Server driver; Microsoft SQL Server （for OS/2）	Banyan VINES
DBMSVIN3.DLL	Network Integration Kit for Banyan VINES （for OS/2）	DBNMP3.DLL*
	SQL Server driver; Microsoft SQL Server （for OS/2）	*
 DBNMP3.DLL 是和一些 Microsoft 产品同时发售的，包括 SQL Server, Microsoft Access, 及 Visual Basic。请确认 SQL Server 驱动程序使用的是最新版的 DLL 。

下表列出可以和 Sybase SQL Server 各网络一起使用的网络程序库 DLL。

用此 网络	使用其中一个 DLL	和此套装软件一起 发售
Novell NetWare*	Contact Sybase	Contact Sybase
TCP/IP Networks	Contact Sybase**	Contact Sybase
 *	如果是 Novell NetWare ，必须使用 NLM  （可载入网络模型）版的 Sybase SQL Server.

 **	Sybase 对大部分（但不是全部） TCP/IP 网络提供网络程序库。


请参阅

对所有用户

安装 SQL Server 驱动程序


安装 SQL Server 驱动程序

请参阅

要安装 SQL Server 驱动程序时

1	如果有 Microsoft SQL Server （for OS/2） 4.2 或更旧的版本，或任何 Sybase 版的 SQL Server，请遵循安装分类存储过程的指示。

2	增加数据来源到每个含有要存取数据的副本中

要安装新版的 SQL Server 驱动程序时

1	在[程序管理器]窗口的[主群组]中双击[控制面板]图标。在[控制面板]窗口中双击[ ODBC ]图标。

附注 如果是 Microsoft Windows version 版本 3.0，可在[Microsoft ODBC]群组中双击[ Microsoft ODBC 管理器]图标，以启动[ODBC 管理器]。

此时会显示[数据来源]对话框。

2	选择[数据来源]对话框中的[驱动程序]按钮。

此时会显示[驱动程序]对话框。

选择[驱动程序]对话框中的[增加]按钮。

此时会显示[增加驱动程序]对话框。

4	在文字框中输入含有 SQL Server 驱动程序的磁盘名及目录名字。或选择[浏览]按钮来选定磁盘名及目录名字。

５	选择[增加驱动程序]对话框中的[确定]按钮。

此时会显示[安装驱动程序]对话框。

6	选择[现有 ODBC 驱动程序]清单中的 SQL Server.

７	选择[确定]按钮。

驱动程序安装完毕。

要删除 SQL Server 驱动程序时

1	在[程序管理器]窗口的[主群组]中双击[控制面板]图标。在[控制面板]窗口中双击[ODBC]图标。

附注 如果是 Microsoft Windows version 版本 3.0，可在[Microsoft ODBC]群组中双击[ Microsoft ODBC 管理器]图标，以启动[ODBC 管理器]。

此时会显示[数据来源]对话框。

2	选择[数据来源]对话框中的[驱动程序]按钮。

此时会显示[驱动程序]对话框。

3	选定[安装 ODBC 驱动程序]清单中的 SQL Server.

4	选择[删除]按钮。

此时会显示信息，要求您确认是否要删除驱动程序，以及使用驱动程序的所有数据来源。

5	选择[是]按钮。


请参阅

所有用户

增加，修改，和删除 SQL Server 数据来源

硬件和软件需求


数据来源 （SQL Server）

数据来源含有用户要存取的数据，以及检索该数据所需的信息。对SQL Server驱动程序而言，数据来源就是 SQL Server 数据库、该数据库常驻的服务器以及访问数据库的网络。


安装分类存储过程

SQL Server 驱动程序使用一组系统存储过程，也就是分类存储过程，以取得 SQL Server 系统目录中的信息。如果是 Microsoft SQL Server for Windows NT 及 Microsoft SQL Server （for OS/2） 或更新的版本，当安装或更新 SQL Server 时，就会自动安装分类存储过程。如果是旧版的 Microsoft SQL Server 及任何 Sybase 版的 SQL Server，系统管理员就必须安装这些存储过程，除非它们已安装完毕。

要安装分类存储过程时

1	将含有 SQL Server 驱动程序的软盘插入 A 盘。

2	在  isql 实用程序中运行 INSTCAT.SQL 批处理文件。

 C:> ISQL /U sa /P  sa-password  /S  server-name  /i A: \INSTCAT.SQL

此格式的参数如下：

参数	意义
sa-pas sword	系统管理员的口令。
server-name	SQL Server 常驻服务器的名字。
附注 要执行  isql ，必须将计算机安装为 SQL Server 的客户端工作站。

附注 INSTCAT.SQL 文件将产生警告信息。可被忽略掉。

3	退出  isql  .

 1> quit

附注 如果主数据库中没有足够的空间来存储分类存储过程，或记录对现有程序所作的变更，则 INSTCAT.SQL 批处理文件将失败。要建立较大的空间时，可由系统管理员转储事务日志，或从主数据库中删除不使用的非系统存储过程及表。系统管理员也可以备份主数据库并扩充其大小。若需要其他信息，请参阅 SQL Server 文档。

SQL Server 驱动程序使用下列部分或全部分类存储过程。

过程	返回
sp_column_privileges	指定表或多个表的列权限信息。
sp_columns	指定表或多个表的列信息。
sp_databases	数据库的清单。
sp_datatype_info	数据类型的信息。
sp_fkeys	逻辑外来键的信息。
sp_pkeys	主要键的信息。
sp_server_info	服务器的属性名字及匹配值的清单。
sp_special_columns	单表中具有特殊属性之列的信息。
sp_sproc_columns	存储过程的列信息。
sp_statistics	单表的索引清单。
sp_stored_procedures	存储过程清单。
sp_table_privileges	指定表或多个表之表格权限信息。
sp_tables	可以查询的物件清单。
 Microsoft SQL Server  Transact-SQL Reference 中还有其他关于分类存储过程的信息。


增加、修改及删除 SQL Server 数据来源

请参阅

利用 SQL Server 驱动程序存取数据之前，必须对 SQL Server 的每一份副本增加 数据来源  。SQL Server 驱动程序会使用您在增加数据来源时输入的信息来存取数据。数据来源可随时变更或删除。

要增加 SQL Server 数据来源时

1	在[程序管理器]窗口的[主群组]中双击[控制面板]图标。在[控制面板]窗口中双击[ODBC ]图标。

附注 如果是 Microsoft Windows 版本 3.0，可在[Microsoft ODBC]群组中双击[Microsoft ODBC 管理器]图标，以启动[ODBC 管理器]。

2	选择[数据来源]对话框中的[增加]按钮。

此时会显示[增加数据来源]对话框。

3	选定[安装 ODBC 驱动程序]清单中的[SQL Server]，然后选取[确定]按钮。

此时会显示[ODBC SQL Server 安装]对话框。

4	 在 [ODBC SQL Server 安装]对话框 中设置所需的选项值，然后选择[确定]按钮。

要修改 SQL Server 数据来源时

1	在[程序管理器]窗口的[主群组]中双击[控制面板]图标，在[控制面板]窗口中双击[ODBC]图标。

附注 如果是 Windows 版本 3.0，可双击[Microsoft ODBC]群组中的[Microsoft ODBC 管理器]图标，以启动[ODBC 管理器]。

2	在[数据来源]对话框的[数据来源]清单中选定数据来源，然后选择[安装]按钮。

此时会显示[ODBC SQL Server 安装]对话框。

3	在 [ODBC SQL Server 安装]对话框 中设置所需的选项，然后选择[确定]按钮。

要删除 SQL Server 数据来源时

1	在[程序管理器]窗口的[主群组]中双击[控制面板]图标，在[控制面板]窗口中双击[ODBC]图标。

附注 如果是 Windows 版本 3.0，可在[Microsoft ODBC]群组中双击[Microsoft ODBC 管理器]图标，以启动[ODBC 管理器]。

2	在[数据来源]对话框的[数据来源]清单中选定要删除的数据来源。

3	选择[删除]按钮，然后选择[是]按钮确认删除操作。

此时会询问您是否要从 WIN.INI 文件中删除数据来源名字及其相关信息。正在系统地调用 SQL Server 的其他应用程序可能会使用此信息来连接 SQL Server 数据来源。

4	如果确定没有其他应用程序会使用数据来源的相关信息，请选择[是]按钮；否则请选择[否]按钮。


请参阅

对所有用户

连接到 SQL Server 数据来源

安装 SQL Server 驱动程序


连接 SQL Server 数据来源

请参阅

因为属于连接处理的一部分，应用程序可以提示若干信息。如果应用程序提示关于 SQL Server 数据来源 的信息，请进行下列事项：

要连接 SQL Server 数据来源时

1	在[登录 ID]框中输入 SQL Server 的登录号。

2	在[口令]框中输入的口令。

3	选择[确定]。

也可以输入其他非必要的连接信息，例如要连接的数据库及 SQL Server 所要使用的语言。

要连接 SQL Server 数据来源和其他信息时

1	重复上述的步骤1和2，然后选择选项]按钮。

2	在[数据库]框中输入或选定要存取的数据库名字。

3	在[语言]框中输入或选定 SQL Server 所要使用的语言名字。如果所使用的 SQL Server 版本比 4.2 版更旧，则此选项无法使用。

4	如果显示的应用程序名字不正确，请输入应用程序名字。应用程序名字是调用 SQL Server 驱动程序的应用程序名字。

5	如果显示的工作站 ID 不正确，请输入工作站 ID 。通常是应用程序常驻的计算机上的网络名字。

6	选择[确定]。


请参阅

对所有用户

增加，修改，和删除 SQL Server 数据来源

对高级用户

连接字符串（ 高级应用 ）

对程序员

SQLBrowseConnect 的执行（编程应用）

SQLDriverConnect 的执行（编程应用）


释疑

以下讨论如何解决使用 SQL Server 驱动程序时可能遇到的问题。

建立或维护连接服务器的问题

请参阅 Microsoft SQL Server 所附的 Troubleshooting Guide ，找出解决连接问题的方法。

程序"odbc#..." 留在 sysobjects 表中

SQL Server 驱动程序在准备语句时会建立过程。通常，SQL Server 驱动程序在切断与数据来源的连接时，也会删除其所建立任何过程。不过，如果驱动程序和 SQL Server 之间的连接异常终止，例如断电，则这些程序会留在 SQL Server 中。

这些程序的名字是"odbc#< user  >< identifier  >"其中 < user > 是最多 15 字符的用户名字，< identifier > 是识别已准备之 SQL 语句的 10 位数。它们是建立在现用数据库中的 sysobjects 表上。任何由 SQL Server 驱动程序异常留在表中的过程，都可用 SQL Server 管理器删除。


[ODBC SQL Server设置]对话框
[ODBC SQL Server 安装]对话框

 [ODBC SQL Server 安装]对话框有如下选项：

数据来源名字

通过此名来标识数据来源。例如，“Personnel Data”。

描述

它描述数据来源中的数据。例如：“Hire date, salary history, and current review of all employees”。

服务器

标识用户网络上 SQL Server 的名字。用户可从表中选定服务器，也可输入服务器名。为获得更多信息，请单击用户的网络名。

Banyan VINES

 Microsoft Windows for Workgroups，Microsoft LAN Manager 及其兼容网络 （例如，IBM LAN Server 或 DEC pathworks）

Novell NetWare

TCP/IP 网络（ 装置 ）

网络地址

此地址指明 SQL Server 数据库管理系统（DBMS）所在位置，驱动程序将从此 DBMS 中检索数据。在 Microsoft SQL Server 中，用户可以将值设定为（默认值），为获得网络地址的更多信息，请单击用户的网络名。

Banyan VINES

 Microsoft Windows for Workgroups，Microsoft LAN Manager 及其兼容网络 （例如，IBM LAN Server 或 DEC pathworks）

Novell NetWare

TCP/IP 网络（ 装置 ）

网络程序库

它是 SQL Server 网络程序库 DLL 的名字。SQL 服务驱动程序用它来与网络软件通信。如果此选项的值是（默认值），SQL Server使用在 SQL Server 客户端配置实用程序 中指定的默认网络程序库。为获得使用网络程序库的详细信息，请单击用户的网络名。

Banyan VINES

 Microsoft Windows for Workgroups，Microsoft LAN Manager 及其兼容网络 （例如，IBM LAN Server 或 DEC pathworks）

Novell NetWare

TCP/IP 网络（ 装置 ）

选项

为存取以下字段，单击[选项]按钮。

数据库名

SQL Server 数据库的名字

语言名

SQL Server 使用的某国语言，仅被用于 SQL Server 4.2 版或更高的版本。

转换

描述当前所显示的 转换程序 。为选定新的转换程序，选择[选定]按钮，并从[选定转换程序]对话框的清单中选定新的转换程序。

把 OEM 字符转换为 ANSI 字符

如果 SQL Server 客户机和 SQL Server 使用相同的非 ANSI 字符集 ;请选定[转换 OEM 到 ANSI 字符]选择框。

如果 SQL Server 客户机和 SQL Server使用不同字符集，用户应指定字符集转换程序。


在 Microsoft Windows for Workgroups，Microsoft LAN Manager 及其兼容网络上可使用的服务器

输入正在运行 SQL Server 的计算机的网络名。


在Novell网上可使用的服务器

如果要使用网络程序库 DBMSSPX3.DLL，请输入 SQL Server 启动时在 Netware Bindery 上所登录的名字。在 Windows NT 中，此名字由[SQL Server 设置]来配置。在 OS/2 中，它被指定为[网络管理器]的命令行参量。

如果要使用网络程序库 DBNMP3.DLL，请输入在安装[NetWare OS/2 Requestor]时用户指定的服务器名。


在 Banyan VINES 上可使用的服务器

如果用户使用 DBMSVIN3.DLL 网络程序库，请输入 SQL Server 启动时登录于 Streetalk 目录中的基于 PC 服务程序名字（例如，Server1@engineering@xyzcorp）。在OS/2中，此名字被指定为[网络管理器]的命令行参数。

如果使用的是 DBNMP3.DLL 网络程序库，请输入在运行 SETNETB 命令时所指定的服务器名。


在 TCP/IP 网（装置）上可使用的服务器。

使用 TCP/IP 装置时，在[网络程序库]和[网络地址]文字框中输入别名和值。

使用 Microsoft Windows for Workgroups, Microsoft LAN Manager, 及其兼容网络时，可用 TCP/IP 传输协议上以命名的管道（pipe）来连接 SQL Server。在这种情况，要求输入 SQL Server 正在运行的计算机的网络名。


Microsoft Windows for Workgroups, Microsoft LAN Manager,及其兼容网络的网络地址

为在 SQL Server 中使用默认命名管道（\ \server  \pipe \sql \query）  （其中 Server 在[服务器]文字框中被指定），请在[网络地址]文字框中输入（默认值）。为使用不同命名管道，在[网络地址]文字框中指定完整的管道名字，完整管道名字的格式是\ \server  \pipe \ pipename ，其中 server 在[服务器]文字框中被指定，并且  pipename 是管道名字。


Novell NetWare 中的网络地址

如果要使用 DBMSSPX3.DLL 网络程序库，SQL Server 驱动程序将检索与 NetWare Bindery中的名字相关的网络地址。为使用[服务器]文字框中指定的名字，请在[网络地址]文字框中输入（默认值）。为使用不同的名字，请在[网络地址]文字框中输入该名字。

如果使用 DBNMP3.DLL 网络程序库，SQL Server 驱动程序会使用已命名管道作为网络地址。为使用在安装 NetWare OS/2 Requestor （ \\server\pipe\sql\query）时所指定服务器的默认命名管道，请在[服务器]文字框中输入服务器名，并在[网络地址]文字框中输入（默认值）。为使用不同的已命名管道，要指定完整的管道名字，完整管道名字的格式是\\server\pipe\ pipename ，其中 server 在[服务器]文字框中被指定，pipename 是管道的名字。

如果要使用其他网络程序库（如 Sybase SQL Server），请与 sybase 公司联系，以取得关于网络地址的使用信息。


Banyan VINES 的网络地址

如果要使用 DBMSVIN3.DLL 网络程序库，SQL Server 驱动程序检索与 StreeTalk 目录服务程序中的名字相关的网络地址。为使用[服务器]文字框中指定的名字，在[网络地址]文字框中输入（默认值）。为使用不同的名字，请在[网络地址]文字框中输入该名字。

如果使用 DBNMP3.DLL 网络程序库，SQL Server 驱动程序会使用已命名管道作为网络地址。为使用在运行 SETNETB 命令（\\server \pipe\sql\query）时所指定的默认命名管道，要在[服务器]文字框中输入服务器名，并在[网络地址]文字框中输入（默认值）。为使用不同的已命名管道，要指定完整的管道名字，完整管道名字的格式是\\server\pipe\pipename ，其中服务器在[服务器]文字框中被指定，而 pipename 是管道的名字。


用于 TCP/IP 网（装置）的网络地址

网络地址的格式：

 IP-address  , socket-address

其中，IP-address 是服务器的 IP 地址，而 socket-address 是服务器的装置地址。例如，11.1.8.166，2025。


在 Microsoft Windows for Workgroups，Microsoft LAN Manager 及其兼容网络上可使用的网络程序库

用户应使用[命名管道]网络程序库（DBNMP3.DLL）来连接这些网络。如果 SQL Server客户端配置实用程序中的默认网络设置是[已命名的管道]，请在[网络程序库]文字框中输入（默认值）。如果默认的网络设置是其他方式，请在[网络程序库]文字框中输入 DBNMP3（不要包括 .DLL 后缀名）。

DBNMP3.DLL 是和 SQL Server 驱动程序一起发售的，同时也是和许多其他 Microsoft 产品一起发售的，其中包括 Microsoft SQL Server, Microsoft Access, 和 Visual Basic。请确认 SQL Server驱动程序使用的是最新版的 DLL。


用于 Novell NetWare 的网络程序库

在 Microsoft SQL Server for Windows NT 中，用户应使用 Novell IP/SPX网络程序库（DBMSSPX3.DLL）来连接 Novell NetWare。对 OS/2 上运行的 Microsoft SQL Server，用户可使用 Novell IPX/SPX 网络程序库或 Network Integration Kit for Novell NetWare，也可使用[已命名的管道]网络程序库（DBNMP3.DLL）。使用 sybase SQL Server 时，请与 sybase 公司联系，以取得关于网络程序库的使用信息。

如果 SQL Server客户端配置实用程序中的默认网络是 Novell IPX/SPX 或[已命名的管道]（仅适用于 OS/2 ）请在[网络程序库]文字框中输入（默认值），SQL server 驱动程序将使用指定的程序库。如果默认的网络设置是其他方式，请在[网络程序库]文字框中输入 DBNMP3（仅适用于 OS/2 ）（不要包括 .DLL 扩展名）。

DBNMP3.DLL 是和 SQL Server 驱动程序一起发售的，同时也是和许多其他 Microsoft 产品一起发售的，其中包括 Microsoft SQL Server, Microsoft Access, 和 Visual Basic。请确认 SQL Server 驱动程序使用的是最新版的 DLL。


用于 Banyan VINES 的网络程序库

对于在 OS/2 上运行的 Microsoft SQL Server，用户可使用Banyan VINES网络程序库（DBMSVIN3.DLL）和Network Integration Kit for Banyan VINES，也可使用[已命名的管道]网络程序库（DBNMP3.DLL）。

如果 SQL Server客户端配置实用程序中的默认网络是 Banyan VINES 或[已命名的管道]请在[网络程序库]文字框中输入（默认值），SQL server 驱动程序将使用指定的程序库。如果默认的网络设置是其他方式，请在[网络程序库]文字框中输入 DBMSVIN3 或 DBNMP3（不要包括 .DLL 扩展名）。

DBMSVIN3.DLL 是和Network Integration Kit for Banyan VINES 一起发售的，DBNMP3.DLL 是和 SQL Server 驱动程序一起发售的，同时也是和许多其他 Microsoft 产品一起发售的，其中包括 Microsoft SQL Server, Microsoft Access, 和 Visual Basic。请确认 SQL Server 驱动程序使用的是最新版的 DLL。


用于 TCP/IP 网络（装置）的网络程序库

请与 sybase 公司联系，以确定要使用 TCP/IP 网络中的哪个网络程序库。


SQL Server 客户端配置公用程序
SQL Server 客户端配置实用程序

基于 Windows 的实用程序发售时包含在 Microsoft SQL Server 的[Windows 客户设置]盘上。它同时也是和 Network Integration Kit for Novell NetWare 及 Network Integration Kit for Banyan VINES 一起发售的。


连接字符串 （ 高级应用）

请参阅

SQL Server 驱动程序中连接字符串使用如下关键字。其中有些关键字是可选的。

关键字	描述
DSN	数据来源的名字
SERVER	数据来源所在网络的计算机的名字
UID	用户登录号
PWD	用户指定的口令
APP	调用 SQL Server 驱动程序的名字（可选的）
WSID	工作站号。通常，它是应用程序所在计算机的网络名（可选的）
DATABASE	SQL Server 的数据库名（可选的）
LANGUAGE	SQL Server 使用的某国语言。它仅用于4.2版或更高版的 SQL Server （可选的）
例如，为连接登录号为 Smith ，口令为 Sesame 的服务器 HRSRVR 上的Human Resources 数据来源时，应使用如下连接字符串：

 DSN=Human Resources;SERVER=HRSRVR;UID=Smith;PWD=Sesame

为指定相同服务器上的 Payroll 数据库，应使用如下连接字符串：

 DSN=Human Resources;SERVER=HRSRVR;UID=Smith;PWD=Sesame;DATABASE=Payroll


请参阅

对所有用户

连接到 SQL Server 数据来源

对程序员

SQLBrowseConnect 的执行

SQLDriverConnect 的执行


SQL 语句 （ 高级应用）

请参阅

SQL Server 驱动程序完全支持 SQL 最小语法集。此外，它几乎支持核心和扩展 ODBC 语法中的大部分语句。按照 ODBC 的设计，SQL Server 驱动程序将本国 SQL 语法传送给 SQL Server。

下列的帮助主题描述 SQL Server 驱动程序执行的 SQL 语法。

对高级用户

ODBC SQL 语法的执行（ 高级应用 ）

ODBC SQL 语法的限制（ 高级应用 ）

未支持的 ODBC SQL 语法（ 高级应用 ）

对程序员

ODBC SQL 语法的限制（编程应用）


请参阅

对高级用户

数据类型（ 高级应用 ）

对程序员

SQLGetInfo 返回值（编程应用）


ODBC SQL 语法的执行 （ 高级应用）

执行 ODBC SQL 语法时，应注意 CREATE TABLE 和 ALTER TABLE 语句的执行。

SQL Server 驱动程序为 CREATE TABLE 语句中的每一列定义增加了 NULL 的规格说明， CREATE TABLE 语句本身并不指明列是否为空（ BIT 列例外，它不能为空）。它也为 ALTER TABLE 语句中的每一列定义增加了对空标志的说明（ BIT 列例外，它不能为空）。

这样做的目的是消除 ODBC 和 SQL Server 所定义的 SQL 语法中的不同：

在 ODBC 语法中，定义为不可空的列会被假定为可空。

在 SQL Server 语法中，定义为可空的列会被假定为不可空。


ODBC SQL 语法的限制 （ 高级应用）

SQL Server 驱动程序和 SQL Server 对 ODBC SQL 语法主要有如下限制：

受限制的 SQL	描述
批处理 SQL 语句	批处理 SQL 语句不能包含CREATE VIEW 语句。
CURDATE 标量函数	由于 SQL Server 驱动程序并不支持 SQL_DATE 数据类型，因此 CURDATE 标量函数返回 SQL_VARCHAR 类型的值而不是 SQL_DATE 类型的值。
CURITIME 标量函数	由于 SQL Server 驱动程序并不支持 SQL_TIME 数据类型，因此，CURTIEM 标量函数返回 SQL_VARCHAR 类型的值而不是 SQL_TIME 类型的值。
SIGN 标量函数	如果 SIGN 标量函数的参数是实数，它将返回类型为 SQL_FLOAT 的值。


SQL Seriver 驱动程序不支持的 ODBC SQL 语法（高级应用）
 SQL Server 驱动程序不支持的 ODBC SQL 语法 （ 高级应用）

SQL Server 驱动程序支持除下表所列语句外的所有核心及扩展 ODBC 语法中的 SQL 语句和子句。

未支持的语句	描述
CREATE INDEX （ 创建索引 ）	SQL Server 驱动程序不支持 ASC 和 DESC 子句。如果使用这些子句，会产生语法错误
DELETE（ 删除 ）	SQL Server 驱动程序不支持 WHERE CURRENT OF cursor-name 子句（定位的删除语句）
DROP INDEX（ 删除索引 ）	应使用 index-name ，而不是 index-name,table-name 。
IEF	不支持集成化加强机能（IEF）中的子句
MAX，MIN	这些函数中，DISTINCT 关键字不被支持。
（ SELECT ）选择	不支持 FOR UPDATE OF 子句（select_for_update 语句）。
（ UPDATE ）修改	SQL Server 驱动程序不支持 WHERE CURRENT OF cursor-name 子句（定位的删除语句）


 ODBC SQL 语法的限制 （ 编程应用）

SQL Server 驱动程序和 SQL Server 主要对下列 ODBC SQL 语法有限制：

受限 SQL	描述
过程	使用 SQL Server 本国语法时，如果过程在已准备的批处理语句中作为第一条语句执行，它应带有 EXECUTE 关键字。
SQL_DATA_AT_EXEC 参数	可用 SQL_DATA_AT_EXEC 参数来为 SQL_LONGVARCHAR 列或 SQL_LONGVARBINARY 列传送超过65,536字节的数据，但这些参数有一些限制。


过程执行限制（编程应用）
对过程执行的限制（编程应用）

在 SQL Server 使用的 SQL 语法中，如果执行过程的语句在批处理文件中为首条语句，可无 EXECUTE 关键字。但如果它是准备好的语句，则应加上EXECUTE关键字。这是因为 SQL Server 驱动程序用其他语句组成准备语句，因此，此准备语句在批处理中不再是首条语句。

基于以下两点应避免此问题：

对于极大相互操作，执行过程应使用为此目的而设计的 ODBC 的 SQL 扩展来调用。

使用 SQL Server 驱动程序，用准备语句执行过程（而不是直接执行它）时没有优点。因为 SQL Server 驱动程序在准备语句时，只是简单地把它置于过程中并编译此过程。


对 SQL_DATA_AT_EXEC 参数的限制 （ 编程应用）

如果 SQL_DATA_AT_EXEC 参数要为 SQL_LONGVARCram 中的 CbColDef 参数， 和在 SQL Put Data 中的 CbvalueMax 参数 应是 SQL_NULL_HAR 或 SQL_LONGVARBINARY 列传送超过65，536字节的数据，则有如下限制：

它仅被用作 INSERT 语句中的插入值和 UPDATE 语句中的插入值，以及 SET 语句中的 SET 子句的表达式。

带有 SQL_DATA_AT_EXEC 参数，并且数据类型不是 SQL_LONGVARCHAR 或 SQL_LONGVARBINARY 的语句不能使用它。 （但它可在任何不带 SQL_DATA_AT_EXEC 参数类型的语句中使用）。

包含此参数的 INSERT 语句应包含列的清单（其他应用中，列的清单是可选的）

如果它的值为空，则执行 SQL Set paDATA。


数据类型 （ 高级应用）

请参阅

SQL Server 驱动程序将 SQL Server 数据类型映射到 ODBC SQL 数据类型。下表中列出所有 SQL Server 数据类型，和它们将被映射到的数据类型。

SQL Server SQL 数据类型	ODBC SQL 数据类型
binary	SQL_BINARY
bit	SQL_BIT
char	SQL_CHAR
datetime	SQL_TIMESTAMP
float	SQL_FLOAT
image	SQL_LONGVARBINARY
int	SQL_INTEGER
money	SQL_DECIMAL
real	SQL_REAL
smalldatetime	SQL_TIMESTAMP
smallint	SQL_SMALLINT
smallmoney	SQL_DECIMAL
sysname	SQL_VARCHAR
text	SQL_LONGVARCHAR
timestamp*	SQL_VARBINARY
tinyint	SQL_TINYINT
varbinary	SQL_VARBINARY
varchar	SQL_VARCHAR
*	由于 timestamp （时间戳）列中的值不是 datatime （日期和时间）数据，而是 Varbinary（8） 数据，它指明了 SQL Server 活动序列。因此，时间戳数据类型要被转化成 SQL_VARBINARY 数据类型。

附注 SQL Server 驱动程序并不将类型为 SQL_CHAR，SQL_VARCHAR或 SQL_LONGVARCHAR 的 SQL 数据转化为 SQL_C_DATE，SQL_SQL_C_TIME 或 SQL_C_TIMESTAMP 的 C 数据。它支持 Microsoft ODBC SDK 程序员指南中附录 D 的所有其他转换， 这些转换用于此主题下先前所列出的 ODBC SQL 数据类型

下列的帮助主题描述的 SQL Server 驱动程序执行时的数据类型。

对高级用户

数据类型的限制（ 高级应用 ）

对程序员

数据类型的执行（编程应用）

数据类型的限制（编程应用）


请参阅

对高级用户

SQL 语句（ 高级应用 ）


对数据类型的限制（高级应用）
数据类型的限制 （ 高级应用）

SQL 驱动程序和 SQL Server 对数据类型有如下重要限制

被限制的数据类型	描述
Date literals（日期文字数据）	日期文字数据存储于 SQL_TIMESTAMP 列时（SQL Server 的 datatime（日期时间） 或 smalldatetime（小日期时间）），它的时间值形同12：00：00：000am（午夜）。
money and smallmoney （[钱]和[小钱]）	money and smallmoney 数据类型只有整数部分很重要。如果 SQL money 的小数部分在数据类型转换时被截去， SQL Server 驱动程序将发出警告而不产生错误。
SQL_BINARY	如果 SQL_BINARY 列为可空，数据来源中的数据不能用零来填充，在检索列数据时，SQL Server 驱动程序用零从右部填充它。然而，如果数据在 SQL Server 操作时被创建，例如连接，不进行填充。
SQL_CHAR（截断）	当把数据插入 SQL_CHAR 列时，如果数据过大，不能放入列内，SQL Server 在不产生警告信息的情况下右截断它。因此，当字符数据被右截断时， SQL Server 驱动程序不能为应用程序提供警告信息。
SQL_CHAR（可空）	如果 SQL_CHAR 列是可空的，数据来源中存储的数据不能用空格填充。在检索列数据时， SQL Server 驱动程序用空格从右部填充它。然而，如果数据在 SQL Server 操作时被创建，象连接，不进行填充。
Time literals （时间文字）	时间文字存储于 SQL_TIMESTAMP 列（SQL Server 的 datetime （日期时间）或 smalldatetime （小日期时间）类型）时，其日期值为 January 1, 1900。
timestamp（时间戳）	不能修改时间戳列，并且只有 NULL 值才能插入时间戳列。然而，由于时间戳列由 SQL Server 自动修改，空值将被覆盖。
tinyint （小整数）	SQL Server 的 tinyint （小整数）类型是无符号的。如果将一个小整数列赋予类型为 SQL_C_TINYINT的变量（默认映射），当从数据来源中检索出的数据大于127，或送向数据来源的数据小于0时，会出现溢出的错误。这是因为 SQL_C_TINYINT 数据类型是有符号的。
用户定义数据类型	SQL Server 驱动程序将 NULL 增加到列定义时，如果列定义并不显式声明列可空，用户定义数据类型的定义中"可空存储"将被忽略


数据类型的执行（编程应用）

SQL Server 驱动程序按如下方式处理 ODBC SQL 数据类型

数据类型	描述
SQL_CHAR	SQL Server 驱动程序将 NULL 增加到没有显式声明列为空的列定义中。SQL 服务程序不支持可以是空列的 SQL_CHAR 列。因此，SQL_CHAR 被声明为空时（由用户或 SQL Server 驱动程序来声明），它被当作 SQL_VARCHAR 类型被创建。 SQL Server 驱动程序识别这些列，并在 SQLColAttributes ， SQLColumns ，和 SQLDescribeCol 中传回正确的数据类型和数据类型名，它也可填充从这些列中检索出来的数据。
tinyint（小整数）	SQL Server 的 tinyint （小整数）类型是无符号类型。如果将具有 SQL_C_TINYINT 数据类型的数据送往小整数列（默认映射）， SQL Server 驱动程序把此数据当作无符号数据，即使 SQL_C_TINYINT有符号。如果数据是从小整数列中检索出来的，并被赋给 SQL_C_TINYINT 数据类型的变量;即使 SQL_C_TINYINT 有符号，应用程序也应把此变量当作无符号数据。


对数据类型的限制（编程应用）
数据类型的限制 （ 编程应用）

SQL Server 驱动程序和 SQL Server 对数据类型有如下重要限制。

被限制的数据类型	描述
LONG 数据类型	SQL_LONGVARBINARY 数据应作为 二进制数据，而不是作为转换成字符的二进制数据传送给 SQLPUTDATA , 同时 , SQL_DATA_AT_EXEC 参数 被限制为 SQL_LONGVARBINARY 和 SQL_LONGVARCHAR 数据类型。
用户定义的数据类型	含有用户定义数据类型的列，如果此数据类型基于 char 类型，并且没被声明可空列或 NULL，此列可以按类型 varchar 创建。 SQLColAttributes ， SQLColumns ，和 SQLDescribecol 将 SQL_VARCHAR 作为它们的数据类型返回，不填充从这些列中检索出的数据。


用户定义数据类型的限制 （ 编程应用）

SQL Server 驱动程序将 NULL 增加到没有显式声明列为可空列的列定义中。SQL Server 并不支持可空的 char 列。因此，声明为 NULL （由用户或 SQL Server 驱动程序来声明），且以 char 类型为基本类型的用户定义数据类型，将被作为类型 varchar 创建。

正因为如此， SQLColAttributes ， SQLColumns ，和 SQLDescribeCol 将返回所声明的用户定义数据类型名和 ODBC_SQL 数据类型 SQL_VARCHAR。而且，象 char 数据一样，从这些列中返回的数据不被填充。


错误信息 （ 高级应用）

产生错误时， SQL Server 驱动程序返回本国错误号，SQLSTATE（ODBC 错误号）和错误信息。此驱动程序从驱动程序检查出的错误和 SQL Server 返回的错误中获得此信息。

本地错误

对数据来源中产生的错误， SQL Server 驱动程序返回由 SQL Server 返回给它的本地错误。对由服务器或驱动程序管理器检查出的错误， SQL Server 驱动程序将返回为空值的本地错误。在 SQL Server 的主数据库中[ sysmessages （系统消息）]的系统表的错误列中，可找到本地错误的清单。

SQLSTATE

对于数据来源中产生的错误， SQL Server 驱动程序将返回的本地错误映射到适当的 SQLSTATE。如果数据来源中产生的错误不能被映射， SQL Server 驱动程序返回 SQLSTATE 37000（语法错误或存取违例）。对由驱动程序或驱动程序管理器检查出的错误， SQL Server 驱动程序或驱动程序管理器产生合适的 SQLSTATE。

错误信息

对于发生在数据来源中的错误， SQL Server 驱动程序返回一条基于 SQL Server 返回消息的错误信息。对于发生在 SQL Server 驱动程序或驱动程序管理器中的错误，SQL Server 驱动程序返回一条基于 SQLSTATE 相关文本的错误信息。由 SQL Server 返回的错误信息的清单，可在 SQL Server 主数据库的［Sysmessage (系统消息)]系统表的列描述中找到。

错误信息有如下格式：

[经销商][ODBC 构件][数据来源]错误消息

其中，方框号（[]）中的前缀指明了错误来源。下表显示由 SQL Server 驱动程序返回的这些前缀的值。

附注: 当错误发生在数据来源时，[经销商 ]和[ODBC 构件 ]前缀指明了分消商的名字,和从数据来源中接收错误信息的 ODBC 组成元素的名字。

错误来源	前缀	值
驱动程序管理器	[经销商 ] [ODBC 构件 ] [数据来源 ]	[Microsoft] [ODBC DLL] N/A
SQL Server 驱动程序	[经销商 ] [ODBC 构件 ] [数据来源 ]	[Microsoft] [ODBC SQL Server 驱动程序] N/A
SQL Server	[经销商 ] [ODBC 构件 ] [数据来源 ]	[Microsoft] [ODBC SQL Server 驱动程序] [SQL Server ]


SQL GetInfo 返回值（编程应用）

下表列出 fInfoType 参数和 SQLGetInfo 所传回对应 C 语言宏定义（# define） 的值。 通过将 C 语言宏定义的清单传送给 fInfoTYPE参数 中的 SQLGetInfo ，应用程序就可对这些信息进行检索。

fInfoType 值（宏定义# define）	返回值
SQL_ACCESSIBLE_TABLES	Yes。
SQL_ACCESSIBLE_PROCEDURES	Yes。
SQL_ACTIVE_CONNECTIONS	不知道。（活动连接的实际数字是根据客户计算机上可使用的网络连结数，并且连接数及服务器数据库管理系统所允许的连接数目而定.）
SQL_ACTIVE_STATEMENTS	1
SQL_CONCAT_NULL_BEHAVIOR	非空
SQL_CONVERT_FUNCTIONS	CONVERT
SQL_CONVERT_类型 ，其中 类型 是SQL数据类型（例如 CHAR ）	请参阅下表.
SQL_CURSOR_COMMIT_BEHAVIOR	关闭游标
SQL_CORSOR_ROLLBACK_BEHAVIOR	关闭游标
SQL_DBMS_NAME	SQL Server
SQL_DBMS_VER	01.01.0000或更晚
SQL_DEFAULT_TXN_ISOLATION	事务1可以读事务2提交后引起的变化（SQL_TXN_READ_COMMITTED）。
SQL_DRIVER_NAME	SQLSRVR.DLL
SQL_DRIVER_VER	01.01.nnnn ，其中 nnnn 指定建立日期
SQL_EXPRESSIONS_IN_ORDERBY	Yes。
SQL_FETCH_DIRECTION	下一个。
SQL_IDENTIFIER_CASE	依赖于 SQL Server 的安装是否区分大小写。
SQL_IDENTIFIER_QUOTE_CHAR	不被支持
SQL_MAX_COLUMN_NAME_LEN	30
SQL_MAX_CURSOR_NAME_LEN	32
SQL_MAX_OWNER_NAME_LEN	30
SQL_MAX_PROCEDURE_NAME_LEN	36（跟有分号 [;} 的1到30个字符再加1到5位数字）
SQL_MAX_QUALIFIER_NAME_LEN	30
SQL_MAX_TABLE_NAME_LEN	30
SQL_NULT_RESULT_SETS	Yes。
SQL_MULTIPLE_ACTIVE_TXN	Yes。
SQL_NUMERIC_FUNCTIONS	ABS，ACOS，ASIN，ATAN，ATAN2，CEILING，COS，COT，EXP，FLOOR，LOG，MOD，PI，RAND，SIGN，SIN，SQRT，TAN
SQL_ODBC_API_CONFORMANCE	第1级
SQL_ODBC_SAG_CLI_CONFORMANCE	不是 SAG-compliant。
SQL_ODBC_SQL_CONFORMANCE	极小
SQL_ODBC_SQL_OPT_IEF	No。
SQL_OUTER_JOINS	Yes。
SQL_OWNER_TERM	拥有者
SQL_PROCEDURES	Yes。
SQL_PROCEDURE_TERM	存储的过程
SQL_QUALIFIER_NAME_SEPARATOR	.（句点）
SQL_QUALIFIER_TERM	数据库
SQL_ROW_UPDATES	No。
SQL_SCROLL_CONCURRENCY	只读。
SQL_SCROLL_OPTIONS	只能向前。
SQL_SEARCH_PATTERN_ESCAPE	\（反斜线）。
SQL_STRING_FUNCTIONS	ASCII, CHAR, CONCAT, INSERT, LCASE, LEFT, LENGTH, LTRIM, REPEAT, RIGHT, RTRIM, SUBSTRING, UCASE
SQL_SYSTEM_FUNCTIONS	DBNAME, IFNULL, USERNAME
SQL_TABLE_TERM	表
SQL_TIMEDATE_FUNCTIONS	NOW, CURDATE, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, MONTH, QUARTER, WEEK, YEAR,  CURTIME, HOUR, MINUTE, SECOND
SQL_TXN_CAPABLE	事务仅能包含 DML 语句（SELECT，INSERT，UPDATE和DELETE）。
SQL_TXN_ISOLATION_OPTION	事务 1 能读事务 2 所完成的变更（SQL_TXN_READ_COMMITTED）。 可串行化事务和事务1所影响的数据不能提供给事务2使用（SQL_TXN_SERIALIZABLE）。
下表显示由 SQL Server 支持的转化，它利用 CONVERT 标量函数，将 SQL 数据类型转化为其他类型。


ODBC API 函数 （ 编程应用）

请参阅

SQL Server 驱动程序支持核心和第 1 级的所有函数，并支持下列第 2 级的函数：

SQLBrowseConnect  SQLColumnPrivileges  SQLDataSources  SQLForeignKeys  SQLMoreResults  SQLNativeSql  SQLNumParams	SQLProcedureColumns  SQLProcedures  SQLParamOptions  SQLPrimaryKeys  SQLSetScrollOptions  SQLTablePrivileges
此外， SQL Server 驱动程序支持转换 DLL。

下列帮助主题描述 SQL Server 驱动程序可执行的 ODBC API 函数。

对程序员

ODBC API 函数的执行（编程应用）

ODBC API 函数的限制（编程应用）


请参阅

对高级用户

错误信息（ 高级应用 ）

对程序员

 SQLGetInfo 返回值（编程应用）


ODBC API 函数的执行（编程应用）

下表描述 SQL Server 驱动程序如何执行指定函数。

函数	描述
SQLBrowseConnect	SQL 浏览连接（SQLBrowseConnect） SQLBrowseConnect 使用关键字的三个级别： 1 DSN 2 SERVR，UID，PWD，APP 和 WSID 3  LANGUAGE and DATABASE
SQL ColAttributes , SQLDescribeCol , SQLNumResultCols	如果SELECT语句已准备好，但还没执行时，调用上述任一函数，SQL Server 驱动程序将强制 SQL Server 产生一个空结果集，用它来获得与结果集有关的必要信息。
SQL Columns 和 SQLStatistics	如果 SzTableQualifier 参数是一空串（相对一空指针），SQL Server 返回错误信息
SQLConnect	SQLConnect 从 ODBC.INI 文件中检索关键字 LANGUAGE 的值。如果 SQL Server 不能使用指定语言，它使用指定用户号中的默认语言，并且 SQLConnect 将返回 SQL_SUCCESS_WITH_INFO。如果 SQL Server 不能使用指定用户号中的默认语言， SQLConnect 将返回 SQL_ERROR。 SQLConnect 忽略 DATABASE 关键字的值。
SQLDriverConnect	SQLDriverConnect 使用DSN，SERVER，UID，PWD，APP，WSID，DATABASE 和 LANGUAGE 关键字。
SQLPrepare	SQL Server 并不直接支持 ODBC 的准备/执行模式。为准备一条 SQL 语句， SQL Server 驱动程序将它作为过程保存，并对它进行编译以便以后执行。


SQLBrowseConnect 的执行（编程应用）

SQLBrowseConnect 使用连接信息的三个级别。对于级别中的每一关键字，下表指明，有效值的清单是否作为 SzConnStrOut 参数中的关键字被返回，以及此关键字是否可选，此表也对关键字作出了描述。

级别 1：

关键字	名称	返回清单?	可选?	描述
DSN	N/A	N/A	否	列于ODBC.INI文件中的数据来源的名字
级别 2

关键字	名称	返回清单?	可选?	描述
SERVER	服务器	是	否	数据来源所在网络的服务器名
UID	登录号	否	否	用户登录号
PWD	口令	否	依赖于用户	用户指定的口令
APP	AppName	否	是	应用程序（AppName）调用的名字  SQLBrowseConnect .
WSID	工作站号（WorkStation ID）	否	是	工作站号（WorkStation ID）。通常，这是应用程序所在计算机的网络的名字。

级别 3

关键字	名称	返回清单?	可选?	描述
DATABASE	数据库	是	是	SQL Server 数据库的名字
LANGUAGE	语言	是	是	SQL Server 使用的某国语言，它仅用于与 SQL Server 4.2 版或更高版本进行连接时。
 SQLBrowseConnect 忽略 ODBC.INI 文件中关键字  Language 和  Database 的值。如果传送到  SQLBrowseConnect 的连接字符串中所指定的语言或数据库是无效的，  SQLBrowseConnect 返回 SQL_NEED_DATA 和第 3 级的连接属性。

 SQLBrowseConnect 在使用 DATABASE  关键字时，并不检查用户是否存取了所列出的所有数据库。如果用户没有存取所选择的数据库， SQLBrowseConnect 返回 SQL_NEED_DATA 和第 3 级别的连接属性。


SQLColAttributes，SQLDescribeCol，和 SQLNumResultCols 的执行（编程应用）

SQL Server 在返回结果集中的数据之前，返回与结果集相关的信息。SQL Server 通过 SQLColAttributes ， SQLDescribeCol ，和  SQLNumResultCols 函数将这些信息返回给应用程序。

如果 SELECT 语句已准备，但还没执行，调用上述任一函数， SQL Server 驱动程序将认为它是含有 WHERE 1=2 的 SELECT 语句。这使 SQL Server 产生一个无任何行，但含有与结果集相关信息的结果集。

为将子句 WHERE 1=2 增加到 SELECT 语句中， SQL Server 驱动程序：

1	检查此语句是否为由分号隔开的批处理语句。如果是，驱动程序将删除第一条以外的所有语句。

2	搜索 WHERE 或 ORDER BY 子句，如果找到了，驱动程序将以 WHERE 1=2 来替换这些子句,以及接在子句后的语句。

3	如果没找到 WHERE 或 ORDER BY 子句，把 WHERE1=2 增加到语句末尾。

附注:   对于一个由已准备但还没执行的过程产生的结果集，SQLColAttributes ， SQLDescribeCol ，和 SQLNumResult Cols 不返回与它相关的信息。如果SELECT语句是批处理语句中的第一条语句，并且使用了 SQL Server 的本国语法（两个语句间没有分号），这些函数运行的结果是不可预料的。


SQLDriverConnect 的执行（编程应用）

请参阅

SQLDriverConnect 的连接字符串使用如下关键字：

关键字	描述
DSN	ODBC.INI 文件中列出的数据来源的名字
SERVER	数据来源所在网络的服务器的名字
UID	用户登录号
PWD	用户指定口令
App	调用  SQLDriverConnect  的应用程序的名字（可选的）。
WSID	工作站号。通常，它是应用程序所在计算机的网络名（可选的）。
DATABASE	SQL Server 数据库的名字（可选的）。
LANGUAGE	SQL Server 所使用的某国语言。它仅可用于 SQL Server 4.2 版或更高版（可选的）。
 SQLDriverConnect 使用对话框（如果对话框被弹出）中的关键字值。如果关键字值在对话框中没设置，  SQLDriverConnect 使用连接字符串中的值。如果连接字符串中没设定值，使用 ODBC.INI 文件中的值。

如果  fDriverCompletion 的参数是 SQL_DRIVER_NOPROMPT 或 SQL_DRIVER_COMPLETE_REQUIRED，语言或数据库取自于连接字符串，  SQLDriverConnect 将返回 SQL_ERROR。

如果 fDriverCompletion 的参数是 SQL_DRIVER_NOPROMPT 或 SQL_DRIVER_COMPLETE_REQUIRED，语言或数据库取自于ODBC.INI文件，而且语言或数据库无效时，  SQLDriverConnect 将使用指定用户号的默认语言或数据库，并返回 SQL_SUCCESS_WITH_INFO。

如果 fDriverCompletion 的参数是 SQL_DRIVER_COMPLETE 或 SQL_DRIVER_PROMPT，并且语言或数据库是无效的，  SQLDriverConnect 将重新弹出对话框


请参阅

对高级用户

连接字符串（ 高级应用 ）

对程序员

SQLBrowseConnect 的执行（编程应用）


SQLPrepare 的执行（编程应用）

SQL Server 并不直接支持 ODBC 的准备/执行模式。为按此模式执行， SQL Server 驱动程序分别执行与语句准备相联系的两种操作。

在第一种操作中, SQLprepare 利用 SET NOEXEC 或 SET PARSEONLY 选项（依赖于语句类型）将语句传送到SQL服务器.SQL Server 检查语句的语法错误并返回错误信息。

在第二种操作语句中,从语句中建立一个存储过程，存储过程是多次执行一条语句时的高效方法。此过程被命名为"odbc# < user  >< identifier >"，其中<user >项是最多有15个字符的用户名；<identifier >最多有10位数，用于标识语句。如果所有参数都被设置，过程在准备时间内被创建；如果准备时并没有设置所有的参数，或者是过程被创建时，重新设置了任一参数，过程将在执行时间内被创建。因此， SQLExecute 可返回 SQLPrepare 能返回的任何错误。

如果用户因某些原因（例如缺少权限）而不能创建存储过程，SQL Server 驱动程序将不使用存储过程，而是在每次调用 SQLExecute 时传送SQL语句。


ODBC API 函数的限制（编程应用）

SQL Server 驱动程序中的以下函数不符合 Microsoft ODBC SDK 程序员参考手册中的说明。

函数	描述
分类函数	在除 SQLTables 外的所有分类函数中，清单或过程的合法参数应指定当前的数据库。
SQLColumnPrivileges ，  SQLForeignKeys  ,  SQLPrimaryKeys  ,  SQLStatistics ，和 SQLTablePrivileges	由于这些函数创建了临时表，而 事务 中不允许出现 CREATE TABLE 语句，因此，它们不能用于手工提交模式。
SQLProcedureColumns	SQLProcedureColumns 不会在在过程所创建的任何结果集中不返回列。
SQLPutData	SQLPutData 仅能接受 SQL_LONGVARBINARY 列作为原始二进制数据，而不同于转化成字符数据的二进制数据。
SQLSetStmtOption	由于SQL Server 使用32位有符号整数，因此 SQLSetStmtOption 中的 SQL_MAX_LENGTH 和 SQL_MAX_ROW 选项不能被设置成大于 2 的 31 次方减一（2,147,483,647）的数。如果指定了更大的值，则会使用此值。
SQLSpecialColumns	SQLSpecialColumns 返回可能有 NULL 值的列，而不管  fNullable 的设置。


主题的执行 （ 编程应用）

下列主题的特定执行可能影响 SQL Server 驱动程序的使用。

主题	描述
活动 hstmt 定义	如果有未知结果，则 hstmt 被定义为活动的.
算术错误	SQL Server 在出现数学错误时返回0值，并且直到所有数据部被检索后，才报告此错误。
DB-Library	SQL Server 驱动程序并不使用 DB-Library，因此其作用与 DB-Library 不同。
手工提交模式事务	在手工提交模式中，如果没有当前事务，并且还未处理[数据处理语言]语句时，SQL Server 驱动程序可初始化一个事务。
远程过程调用	SQL Server 驱动程序利用 SQL Server 中的远程过程调用（RPC）机制，来执行被准备的语句（它们作为过程被存储），带有 ODBC 后缀的过程调用，和用于执行类别函数的存储过程。
SET TEXTSIZE	为使驱动程序可检索任何大小的文字和图像数据，当它与 SQL Server 连接时，产生SET TEXTSIZE语句，。此 SET TEXTSIZE 语句指定 SELECT 语句最多能返回 2GB 的数据。
设置 DLL	当用户配置数据来源时，ODBC 管理器调用 ConfigDSN 函数。对于 SQL Server 驱动程序而言，此函数在驱动程序 DLL（SQLSRVR.DLL）中。
可串行化事务	SQL Server 驱动程序通过在 SELECT 语句中每一清单后增加 HOLDLOCK 关键字，来执行 SQL_TXN_SERIALIZABLE 事务独立层。为获得更多信息，可参考 Microsoft SQL Server 语言参考手册中的 SELECT。


Active  hstmt  定义（编程应用）
活动的 hstmt 定义（编程应用）

SQL Server 驱动程序只能有一个活动的 hstmt ；它通过带有 SQL_ACTIVE_STATEMENTS 选项的 SQLGetInfo 返回此信息。当有未知结果时， hstmt 被定义为活动的。在此内容中， 结果 是指 SQL Server 返回的任何信息，例如一个结果集或由 UPDATE 语句所引起的行数的改变值。

附注: hstmt 的活动性与它的状态没有联系。例如，如果执行了SELECT语句但不返回任何列，语句的状态是不活动的，因为没有结果未知。然而，在此语句重新执行时，应使用 SQLFreeStmt 来关闭与它相关的游标。


算术错误（编程应用）

在检索数据时，如果发生象被零除或数字溢出之类的算术错误，SQL 服务将为此列返回数值0，而且直到所有数据都被检索后才报告错误。因而，仅当最后一行数据被检索时， SQLFetch （用于未定的数据）或 SQLGetData （用于非束定的数据）才返回错误信息。 SQL Server 驱动程序或应用程序无法决定所产生错误的个数或错误发生在哪行或哪列。

例如，假定 MyTable 有单一列（IntCol），此列类型为 SQL_INTEGER，并被束定于 SQL_C_SHORT 存储单元，它有四行数据：0，1，2，3。当 SQL Server 试图为含有值0的行求解表达式1/IntCol时，语句

SELECT  1/IntCol FROM MyTable

会导致除 0 的错误.SQL Server 在结果集中将此行的值设置为0（因为发生了算术错误）。驱动程序读取此行时，并不会发现错误。直到读取结果集中最后一行（第四行）数据后，驱动程序才会发现错误，因为此时 SQL Server 才会返回错误。因此，前三次调用 SQLFetch 时，返回 SQL_SUCCESS，第四次调用 SQLFetch 时，返回 SQL_ERROR。

要获得更多信息，可参阅 Microsoft SQL Server 语言参考手册中的 ARITHABORT 和 SET ARITHIGNORE 。


手工提交模式的事务（编程应用）

当 SQL Server 驱动程序使用手工提交模式时，它在下列情况下用 BEGIN TRANSCATION 语句来初始化事务：

SQL 语句未知。

不存在当前事务。

未知的 SQL 语句不是[数据定义语句（DDL ）]语句。

为在手工提交模式中提交或回滚一个事务，应用程序应调用 SQLTransact .SQL Server 发出 COMMIT TRANSACTION 语句来提交事务，发出 ROLLBACK TRANSACTION语句来回滚事务。

在手工提交模式中，DDL 语句仅在下列情况之一时能执行。

已设置手工提交模式，但还没执行[数据处理语言（DML ）]语句时，或者是

已提交或回滚事务，但还没执行 DML 语句时。

为获得手工提交模式的更多信息，参见 Microsoft ODBC SDK程序员参考手册 中的 SQLSetConnectOption 。


远程过程调用（编程应用）

关于表格式数据流（TDS）4.0 版或更高版， SQL Server 驱动程序使用 SQL Server 中的远程过程调用（RPC）来执行过程，而不是在 SQL 语句中将过程传递给 SQL Server 。其中的过程可以是准备语句（它作为过程被存储），具有 ODBC 过程后缀的过程调用，或者是 SQL Server 用以执行分类函数的存储过程。与 SQL 语句中的函数传递相比较，RPC有如下优点：

RPC 比 SQL 语句中传送的过程快。

RPC 可以有输出参数，而 SQL 语句中传送的函数却不能（过程在任一种情况下都可返回一个值）。

为按 RPC 调用一条语句，应用程序

1	建立 SQL 语句

2	为语句中每一参数调用 SQLSetParam。

3	用 SQLPrepare 来准备语句。

4	用 SQLExecute 来执行语句。

为按RPC执行一个过程，应用程序应

1	建立一条使用 ODBC 过程语法的 SQL 语句。此语句为每个输入，输入/输出和输出参数进行参数标记，也为过程返回值（如果有的话）作参数标记。

2	为每个输入，输入/输出和输出参数，以及过程返回值（如果有的话） 调用 SQLSetParma。对于输出参数 DbColDef 应被设置为 65,536 加上参数或返回值的精度。

3	用 SQLExecDirect 执行语句。

附注: 如果应用程序提交了一个使用 SQL Server 语法（相对于使用 ODBC 过程后缀名）的过程， SQL Server 驱动程序将此过程调用作为 SQL 语句传送给 SQL 服务器。


应用程序接口（API）

API 即应用程序接口。它是一组例程，象 Microsoft Access 这样的应用程序，用来请求和执行一些较底层的服务。


字符集

字符集是特定于某个国家或语言的256个字母、数字和符号的集合。每一字符集用一个称之为代码页的表来定义。OEM（Original Equipment Manufacturer）字符集是指除 ANSI 字符集外的任何字符集。ANSI 字符集（代码页为1007）是 Microsoft Windows 所使用的字符集。


一致级

有些应用程序只能使用支持特定级别的功能的驱动程序，这被称为一致级。例如，应用程序也许需要驱动程序在用户获取数据来源时提示输入口令。这是为应用程序接口（API）提供的一致级中级别 1 的部分功能。

每个 ODBC 驱动程序遵守三个应用程序接口（核心，级别1，级别2）之一，并且也要遵守三个 SQL语法级（极小，核心，扩展）之一。驱动程序可能支持高于其本身所在级的一些功能。

关于一致级的详细信息，程序员可参阅 Microsoft ODBC SDK 程序员参考手册。


数据来源

数据来源包括用户想要存取的数据和要获得此数据所必需的信息，数据来源的例子是：

SQL Server 数据库，它所在的服务器和用来访问此服务器的网络

包含一组所要存取的 dBASE 文件集的目录。


DBMS

数据库管理系统。此软件用于组织、分析、搜索、修改和检索数据。


DDL

数据定义语言。任一 SQL 语句都可用于定义数据对象及其属性，例如CREATE TABLE, DROP VIEW, 和 GRANT 语句。


DLL

动态连接库。可供一个或多个应用程序完成共同任务的一组例程。ODBC 驱动程序都是 DLL。


DML

数据处理语言。任一 SQL 语句都可用于数据处理。例如UPDATE, INSERT, 和 DELETE 语句。


ODBC

开放式数据库连接。它由一个［驱动程序管理器］和一组 ODBC 驱动程序组成，可以使应用程序把 SQL 作为标准语言来存取数据。


ODBC 驱动程序（ODBC driver）
ODBC 驱动程序管理器（ODBC Driver Manager）

一个提供存取 ODBC 驱动程序功能的动态连接库（DLL）。


ODBC 驱动程序（ODBC driver）

一个动态连接库（DLL）。可运行被 ODBC 支持的应用程序，例如 Microsoft Excel，能用它来获得对特定数据的存取。每一数据库管理系统（DBMS），如 Microsoft SQL Server，都需要不同的驱动程序。


SQL

结构化查询语言。用于检索、修改和管理数据的语言。


SQL 语句（SQL statement）

结构化查询语言（SQL）中所书写的命令，也被称作查询。SQL 语句指定要进行的操作，例如SELECT，DELETE，或 CREATE TABLE；进行操作的表和列；以及对操作的约束。


转换选项（translation option）

此选项指定转换程序如何转换数据。例如，转换选项可能在转换程序转换字符数据时指定字符集。它也可能提供加密和解密的密钥。


转换程序（translator）

转换应用程序间传递的所有数据的一个动态连接库（DLL）。例如 Microsoft Access 和数据来源。转换程序最普遍的用途是在不同字符集间转换字符数据。转换程序也可用于加密和解密，压缩和解压缩。