此语句用于创建新的代理表。代理表表示远程服务器上的现有对象。
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
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'; |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |