Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.
创建新的代理表,此表表示远程服务器上的现有对象。
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 字符串中的任何位置,则分号将用作字段分隔符。如果没有分号,则将句号用作字段分隔符。利用此行为,便可在数据库和所有者字段中使用文件名和扩展名。
AT 子句中的字符串还可以包含用大括号括起来的局部或全局变量名 ({variable-name})。SQL 变量名的类型必须为 CHAR、VARCHAR 或 LONG VARCHAR。例如,包含 'access;{@myfile};;a1' 的 AT 子句表示 @myfile 是 SQL 变量并且 @myfile 变量的当前内容应该在创建代理表时被替换。
'access;{@myfile};;a1'
CREATE EXISTING TABLE 语句创建新的本地代理表,该代理表映射到处于外部位置的表。CREATE EXISTING TABLE 语句是 CREATE TABLE 语句的变化形式。EXISTING 关键字与 CREATE TABLE 一起用来指定已存在于远程位置的表,以及导入其元数据。以这种方式可将远程表建立为 SQL Anywhere 用户能够看得见的实体。该软件在创建表之前会校验它是否存在于外部位置。
如果对象不存在(主机数据文件或远程服务器对象),此语句将被拒绝并伴随出现错误消息。
从主机数据文件或远程服务器表中抽取索引信息,并将其用于创建系统表 ISYSIDX 的行。该信息定义了服务器术语中的索引和键,并使查询优化程序考虑此表上可能存在的任何索引。
参照约束在适当的时候传递到远程位置。
如果未指定 column-definitions,SQL Anywhere 会根据它从远程表中获得的元数据来派生列的列表。如果指定了 column-definitions,SQL Anywhere 会校验 column-definitions。将对列名、数据类型、长度、标识属性和空值属性进行以下检查:
列名称必须完全匹配(但忽略大小写)。
CREATE EXISTING TABLE 语句中的数据类型必须匹配或者可转换成远程位置的列的数据类型。例如,本地列的数据类型定义为货币,而远程列的数据类型则为数字。
检查每列的 NULL 属性。如果本地列的 NULL 属性与远程列的 NULL 属性不同,则会发出警告消息,但不会中止语句。
检查每列的长度。如果 CHAR、VARCHAR、BINARY、VARBINARY、DECIMAL 和/或 NUMERIC 列的长度不匹配,会发出警告消息,但不会中止命令。
可以选择在 CREATE EXISTING 语句中仅包含实际远程列列表的子集。
Windows Mobile 上不支持此语句。
必须具有 CREATE PROXY TABLE 系统特权才能创建您自己拥有的代理表。必须具有 CREATE ANY TABLE 或 CREATE ANY OBJECT 系统特权才能创建其他人拥有的代理表。
自动提交。
SQL/2008 服务商扩充。
Transact-SQL 受 Adaptive Server Enterprise 支持。location-string 的格式是由具体实现自行定义。
在远程服务器 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 的代理表。该数据库服务器会根据它从远程表中获得的元数据来派生列的列表。
CREATE EXISTING TABLE blurbs AT 'server_a.db1.joe.blurbs';
在远程服务器 rda 上,为 Employees 表创建名为 rda_employees 的代理表。
CREATE EXISTING TABLE rda_employees AT 'rda...Employees';
在远程服务器 rda 上,为由 SQL 变量 table_name 指定的表创建名为 rda_employees 的代理表。
CREATE EXISTING TABLE rda_employees AT 'rda...{table_name}';