Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (中文) » SQL Anywhere 服务器 - SQL 参考 » 使用 SQL » SQL 语句 » SQL 语句 (A-D)

 

CONNECT 语句 [ESQL] [Interactive SQL]

此语句用于建立到数据库的连接。

语法 1
CONNECT
[ TO database-server-name ]
[ DATABASE database-name ]
[ AS connection-name ]
[ USER ] userid [ IDENTIFIED BY password ]
database-server-name, database-name, connection-name, userid, password :
{ identifier | string | hostvar }
语法 2
CONNECT USING connect-string
connect-string : { identifier | string | hostvar }
参数
  • AS 子句   通过指定 AS 子句可对连接进行命名(可选)。这允许建立到同一个数据库的多个连接,或者到同一个或不同的多个数据库服务器的多个连接,所有连接都是同时发生的。每个连接都有自己的关联事务。事务之间有时甚至会发生锁定冲突。例如,当试图从两个不同的连接修改同一数据库中的同一记录时,就会出现这种情况。

语法 2   connect-string 是格式为 keyword=value 的参数设置列表,必须用单引号将它括起来,并用分号隔开。

有关连接字符串的详细信息,请参见连接参数

注释

CONNECT 语句建立与数据库之间的连接,该数据库运行在由 database-server-name 标识的数据库服务器上,由 database-name 来标识。过程、触发器、事件或批处理不支持此语句。

嵌入式 SQL 行为   在嵌入式 SQL 中,如果未指定 database-server-name,则会采用缺省的本地数据库服务器(启动的第一个数据库服务器)。如果未指定 database-name,则会采用给定服务器上的第一个数据库。

WHENEVER 语句、SET SQLCA 和一些 DECLARE 语句不生成代码,因此它们在源文件中可以出现在 CONNECT 语句之前。否则,在成功执行一条 CONNECT 语句之前,不允许执行任何语句。

用户 ID 和口令用于对所有动态 SQL 语句执行权限检查。

有关连接算法的详细说明,请参见对连接进行故障排除

注意

对于 SQL Anywhere,只有语法 1 在嵌入式 SQL 中有效。对于 UltraLite,语法 1 和语法 2 都可以用于嵌入式 SQL。

Interactive SQL 行为   如果在 CONNECT 语句中未指定任何数据库或服务器,Interactive SQL 将保持与当前数据库(而不是与缺省的服务器和数据库)的连接。如果指定了数据库名但未指定服务器名,Interactive SQL 会尝试连接到当前服务器上的指定数据库。如果指定了服务器名但未指定数据库名,Interactive SQL 会连接到指定服务器上的缺省数据库。

例如,如果在与数据库连接时执行以下批处理语句,则将在同一个数据库中创建两个表。

CREATE TABLE t1( c1 int );
CONNECT DBA IDENTIFIED BY sql;
CREATE TABLE t2 (c1 int );

在成功执行一条 CONNECT 语句之前,不允许执行其它数据库语句。

当 Interactive SQL 在窗口模式下运行时,会提示您提供缺少的连接参数。

当 Interactive SQL 在命令提示符模式(从命令行启动 Interactive SQL 时指定了 -nogui)或批处理模式下运行时,或者未使用 AS 子句执行 CONNECT 时,将打开一个未命名的连接。如果已有其它未命名的连接打开,则以前的那个连接将自动关闭。否则,在运行 CONNECT 时不关闭现有连接。

对多个连接的管理是通过当前连接的概念来实现的。在成功执行连接语句后,新连接变成当前连接。要切换到不同的连接,请使用 SET CONNECTION 语句。DISCONNECT 语句用于删除连接。

当与 Interactive SQL 连接时,指定 CONNECT [ USER ] userid 与执行 SETUSER WITH OPTION userid 语句相同。请参见SETUSER 语句

在 Interactive SQL 中,连接信息(包括数据库名、用户 ID 和数据库服务器)出现在 [SQL 语句] 窗格上方的标题栏中。如果未连接到数据库,标题栏中将显示 [未连接]。

注意

除了 Interactive SQL 不支持 hostvar 参数以外,语法 1 和语法 2 在 Interactive SQL 中都有效。

权限

无。

副作用

无。

另请参见
标准和兼容性
  • SQL/2003   语法 1 是核心 SQL 外部的 SQL/基础特性。语法 2 是服务商扩充。

示例

以下是 CONNECT 在嵌入式 SQL 中的用法示例。

EXEC SQL CONNECT AS :conn_name
USER :userid IDENTIFIED BY :password;
EXEC SQL CONNECT USER "DBA" IDENTIFIED BY "sql";

以下示例假定 SQL Anywhere 示例数据库已经启动。

从 Interactive SQL 连接到数据库。Interactive SQL 会提示您输入用户 ID 和口令。

CONNECT;

以 DBA 身份从 Interactive SQL 连接到缺省数据库。Interactive SQL 提示您输入口令。

CONNECT USER "DBA";

以用户 DBA 的身份从 Interactive SQL 连接到示例数据库。

CONNECT
TO demo11
USER DBA
IDENTIFIED BY sql;

使用连接字符串从 Interactive SQL 连接到示例数据库。

CONNECT
USING 'UID=DBA;PWD=sql;DBN=demo';

连接到示例数据库后,数据库名、用户 ID 和服务器名会出现在标题栏中: demo (DBA) on demo11.