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)

 

CREATE EXISTING TABLE 语句

此语句用于创建新的代理表。代理表表示远程服务器上的现有对象。

语法
CREATE EXISTING TABLE [owner.]table-name
[ (column-definition, ...) ]
AT location-string
column-definition :
column-name data-type [NOT NULL]
location-string :
  remote-server-name.[db-name].[owner].object-name
| remote-server-name;[db-name];[owner];object-name
参数
  • AT 子句   AT 子句指定远程对象的位置。AT 子句支持将分号 (;) 用作分隔符。如果分号出现在 location-string 字符串中的任何位置,则分号将用作字段分隔符。如果没有分号,则将句号用作字段分隔符。这样一来,便可在数据库和所有者字段中使用文件名和扩展名。例如,下列语句将表 a1 映射到 MS Access 文件 mydbfile.mdb
    CREATE EXISTING TABLE a1
    AT 'access;d:\mydbfile.mdb;;a1';

注释

CREATE EXISTING TABLE 语句创建新的本地代理表,该代理表映射到处于外部位置的表。CREATE EXISTING TABLE 语句是 CREATE TABLE 语句的变化形式。EXISTING 关键字与 CREATE TABLE 一起使用时,指定已存在于远程位置的表,并指定其元数据将导入到 SQL Anywhere 中。以这种方式可将远程表建立为 SQL Anywhere 用户能够看得见的实体。SQL Anywhere 在创建表之前,会校验它是否存在于外部位置。

如果对象不存在(主机数据文件或远程服务器对象),此语句将被拒绝并伴随出现错误消息。

从主机数据文件或远程服务器表中抽取索引信息,并将其用于创建系统表 ISYSIDX 的行。这定义了服务器术语中的索引和键,并使查询优化程序考虑此表上可能存在的任何索引。

参照约束在适当的时候传递到远程位置。

如果未指定列定义,SQL Anywhere 会根据它从远程表中获得的元数据来派生列的列表。如果指定了列定义,SQL Anywhere 会校验列定义。将对列名、数据类型、长度、标识属性和空值属性进行以下检查:

  • 列名称必须完全匹配(但忽略大小写)。

  • CREATE EXISTING TABLE 语句中的数据类型必须匹配或者可转换成远程位置的列的数据类型。例如,本地列的数据类型定义为货币,而远程列的数据类型则为数字。

  • 检查每列的 NULL 属性。如果本地列的 NULL 属性与远程列的 NULL 属性不同,则会发出警告消息,但不会中止语句。

  • 检查每列的长度。如果 char、varchar、二进制、varbinary、十进制和数字类型的列的长度不匹配,则会发出警告消息,但不会中止命令。

    可以选择在 CREATE EXISTING 语句中仅包含实际远程列列表的子集。

权限

必须具有 RESOURCE 权限。要为其他用户创建表,必须具有 DBA 权限。

Windows Mobile 上不支持。

副作用

自动提交。

另请参见
标准和兼容性
  • SQL/2003   服务商扩充。

示例

在远程服务器 server_a 上,为 blurbs 表创建名为 blurbs 的代理表。

CREATE EXISTING TABLE blurbs
( author_id ID not null,
copy text not null)
AT 'server_a.db1.joe.blurbs';

在远程服务器 server_a 上,为 blurbs 表创建名为 blurbs 的代理表。SQL Anywhere 会根据它从远程表中获得的元数据来派生列的列表。

CREATE EXISTING TABLE blurbs
AT 'server_a.db1.joe.blurbs';

在 SQL Anywhere 远程服务器 demo11 上,为 Employees 表创建名为 rda_employees 的代理表。

CREATE EXISTING TABLE rda_employees
AT 'demo11...Employees';