您好,我是小DAI,专注于数据库管理员相关的技术问答,请问有什么可以帮您?

sp_defaultloc

语法


sp_defaultloc <dbname>, <defaultloc>, <defaulttype>

参数

<dbname>

是要映射到远程存储位置的数据库的名称。必须已通过 create database 语句对该数据库进行了定义。不能将系统数据库映射到远程位置。

<defaultloc>

是要将数据库映射到的远程存储位置。若要指示服务器删除某一数据库现有的缺省映射,请将此参数设置为 NULL。<defaultloc> 的值必须以句点(.)结束,如下所示:

<server>.<dbname>.<owner>.

<defaulttype>

是指定对象格式的值之一,而对象是由 指定的。有效值如下所示。用引号将 <defaulttype> 值引起来:

  • table – 指示由 <object_loc> 指定的对象是远程服务器可以访问的表。该值是 <defaulttype> 的缺省值。

  • view – 指示由 <object_loc> 指定的对象是由远程服务器管理并被作为表来处理的视图。

  • rpc – 指示由 <object_loc> 指定的对象是由远程服务器管理的 RPC;RPC 的结果集将作为只读表处理。

    示例

    示例 1

    sp_defaultloc 在名为 MYSERVER 的远程服务器中定义远程存储位置 pubs.dbo。它将数据库 pubs 映射到该远程位置。create table book1 语句将在远程位置上创建一个名为 book1 的表。用于 bookN 的 create existing table 语句将要求 pubs.dbo.bookN 已存在于远程位置,并且有关表 bookN 的信息要存储在本地表 bookN 中:

    
    sp_defaultloc pubs, MYSERVER.pubs.dbo., table 
    create table pubs.dbo.book1 (bridges char(15))
    

    示例 2

    删除数据库 pubs 到远程位置的映射:

    
    sp_defaultloc pubs, NULL
    

    示例 3

    标识出远程存储位置 wallst.nasdaq.dbo,其中“wallst”是为 <server_name> 提供的值,“nasdaq”是为 <database> 提供的,“dbo”是为 <owner> 提供的。RPC sybase 必须已存在于远程位置。create existing table sybase 语句将有关 RPC sybase 结果集的信息存储到本地表 ticktape 中。RPC sybase 的结果集被认为是只读表。对于 RPC,不支持插入、更新和删除:

    
    sp_defaultloc ticktape, wallst.nasdaq.dbo., rpc
    create existing table sybase (bestbuy integer)
    

    用法

    使用 sp_defaultloc 时,还存在一些其它注意事项:

  • sp_defaultloc 为本地数据库中的表定义一个缺省存储位置。它将数据库中的表名映射到远程位置。它允许用户为整个数据库建立一个缺省值,而不是在每个 create table 和 create existing table 命令之前发出一个 sp_addobjectdef 命令。

  • <defaulttype> 是 table、view 或 rpc 时,<defaultloc> 参数将采取以下形式:

    
    <server_name>.<dbname>.<owner>.
    

    a) <defaultloc> 说明必须以句点(.)结束。

    b) <server_name> 表示已经由 sp_addserver 添加到 sysservers 中的服务器。<server_name> 参数是必需的。

    c) <dbname> 不一定是必需的。某些服务器类不支持它。

    d) 应始终提供 以避免出现歧义。如果未提供,则实际引用的远程对象可能会不同,这取决于外部登录是否与远程对象所有者对应。

  • 在任何一个 create table 或 create existing table 语句之前发出 sp_defaultloc。无论使用了这两个语句中的哪一个,服务器都将使用 sysattributes 表来确定是否已经为将要创建或定义的对象指定了任何表映射。如果已指定了映射,则 create table 语句指示在 <object_loc> 指定的位置创建该表。create existing table 语句将有关现有远程对象的信息存储在本地表中。

  • 如果在 defaulttypeview 上发出了 sp_defaultloc,然后又发出了 create table,则组件集成服务将在远程服务器上创建一个新表,而不是视图。

  • 更改数据库的缺省位置不会影响先前已经映射到不同缺省位置的表。

  • 在数据库中创建表之后,随后对 <dbname> 中表的所有引用(通过 select、insert、delete 和 update)都将映射到正确的位置。