Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.
建立一个与数据库的连接。
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 }
CONNECT USING connect-string
connect-string : { identifier | string | hostvar }
AS 子句 通过指定 AS 子句可对连接进行命名(可选)。这允许建立到同一个数据库的多个连接,或者到同一个或不同的多个数据库服务器的多个连接,所有连接都是同时发生的。每个连接都有自己的关联事务。事务之间有时甚至会发生锁定冲突。例如,当试图从两个不同的连接修改同一数据库中的同一记录时,就会出现这种情况。
对于语法 2,connect-string 是格式为 keyword=value 的参数设置的列表,必须用单引号将它括起来,并用分号隔开。
CONNECT 语句建立与数据库之间的连接,该数据库运行在由 database-server-name 标识的数据库服务器上,由 database-name 来标识。过程、触发器、事件或批处理不支持此语句。
只有指向运行于同一计算机上的数据库服务器的共享内存连接才支持语法 1。如果要使用 TCP/IP 连接到本地数据库服务器,或者连接到运行于不同计算机上的数据库服务器,则必须使用语法 2。
嵌入式 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 语句相同。
在 Interactive SQL 中,连接信息(包括数据库名、用户 ID 和数据库服务器)出现在 [SQL 语句] 窗格上方的标题栏中。如果未连接到数据库,标题栏中将显示 [未连接]。
除了 Interactive SQL 不支持 hostvar 参数以外,语法 1 和语法 2 在 Interactive SQL 中都有效。
无。
SQL/2008 语法 1 是 SQL/2008 标准的可选语言功能 F771。语法 2 是服务商扩充。
Transact-SQL Adaptive Server Enterprise 同时支持语法 1 和语法 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 demo12 USER DBA IDENTIFIED BY sql;
使用连接字符串从 Interactive SQL 连接到示例数据库。
CONNECT USING 'UID=DBA;PWD=sql;DBN=demo';
连接到示例数据库后,数据库名、用户 ID 和服务器名会出现在标题栏中: demo (DBA) on demo12.