(仅限组件集成服务)指定本地表和外部存储位置之间的映射
sp_addobjectdef <tablename>, <objectdef>[, "<objecttype>"]
是对象的名称(如本地表中所定义的)。<tablename> 可以是以下任意一种形式:
<ul><li><dbname>.<owner>.<object>
</li></ul><ul><li><dbname>..<object>
</li></ul><ul><li><owner>.<object>
</li></ul><ul><li><object>
<dbname> 和 <owner> 是可选的。<object> 是必需的。如果未指定 <owner>,则使用缺省名称(当前用户名)。如果指定了 <dbname>,则它必须是当前数据库名称,并且您必须指定 <owner> 或用 <dbname>..<object> 格式的占位符标记所有者。用引号将任何由多个部分组成的 <tablename> 值引起来。
是一个指定对象外部存储位置的字符串。<objectdef> 中的 <objecttype> 可以是远程服务器可以访问的表、视图或只读远程过程调用(RPC)结果集。对于 <objectdef>,表、视图或 RPC 使用以下格式:
<server_name>.<dbname>.<owner>.<object>
<server_name> 和 <object> 是必需的。<dbname> 和 <owner> 是可选的,但是如果未提供,则必须使用 <dbname>..<object> 格式的占位符。
是指定由 <objectdef> 所确定对象的格式的值之一。有效值包括:
<objectdef> 指定的对象是远程服务器可以访问的表。此值是 <objecttype> 的缺省值。
<objectdef> 指定的对象是由远程服务器管理并被作为表来处理的视图。
<objectdef> 指定的对象是一个由远程服务器托管的 RPC。SAP ASE 服务器将 RPC 的结果集作为只读表进行处理。
应将 <objecttype> 值放在引号内。
此表总结了如何使用每个 <objecttype>:
表 1:objecttype 用法总结
| objecttype | create table | create existing table | 向表写入 | 从表读取 |
|---|---|---|---|---|
| table | 是 | 是 | 是 | 是 |
| view | 否 | 是 | 是 | 是 |
| rpc | 否 | 是 | 否 | 是 |
将数据库 finance 中的本地表 accounts 映射到名为 MYSERVER 的远程服务器中的远程对象 pubs.dbo.accounts。当前数据库必须是 finance:
sp_addobjectdef "finance.dbo.accounts", "MYSERVER.pubs.dbo.accounts", "table"
随后的 create table 在 pubs 数据库中创建一个表。如果 pubs.dbo.accounts 是现有的表,则 create existing table 语句用有关远程表的信息填充表 finance.dbo.accounts。
将本地表 stockcheck 映射到名为 stockcheck 的 RPC,该 RPC 在远程服务器 NEWYORK 上所有者为“kelly”的数据库 wallstreet 中。RPC stockcheck 的结果集被视为只读表:
sp_addobjectdef stockcheck, "NEWYORK.wallstreet.kelly.stockcheck", "rpc"
通常,下一个操作将是对对象 stockcheck 执行 create existing table 语句。
使用 sp_addobjectdef 时,还存在一些其它注意事项:
sp_addobjectdef 指定本地表和外部存储位置之间的映射。它标识位于该位置的对象的格式。只有当安装并配置了组件集成服务后才能使用 sp_addobjectdef。
sp_addobjectdef 取代了 sp_addtabledef 命令。sp_addobjectdef 允许现有的脚本运行而无需修改。在内部,sp_addtabledef 调用 sp_addobjectdef。
只有系统管理员才能提供另一个用户的名称作为表所有者。
当 <objecttype> 是 table、view 或 rpc 时,<objectdef> 参数将采取以下形式:
"<server_name>.<database>.<owner>.<tablename>"
<server_name> –表示已被 sp_addserver 添加到 sysservers 的服务器。
<database> –可能不是必需的。某些服务器类不支持它。
<owner> –应始终提供以避免出现歧义。如果未指定 <owner>,所引用的远程对象可能有所变化,具体情况取决于外部登录名是否与远程对象所有者对应。
<tablename> –远程服务器表的名称。
在发出任何 create table 或 create existing table 命令之前,需使用 sp_addobjectdef。但是,如果远程表已存在,则在执行 create proxy_table 前,无需使用 sp_addobjectdef。
create table 仅对 <objecttype> 值 table 和 file 有效。当使用 create table 或 create existing table 时,SAP ASE 服务器检查 sysattributes 以确定是否已为该对象指定了任何表映射。跟在 <objecttype> 值 view 和 rpc 后面的是 create existing table 语句。
在创建完表之后,以后对本地表名称的所有引用(通过 select、insert、delete 和 update)都将被映射到正确的位置。