同义词简介

同义词是用来实现下列用途的数据库对象:

  • 为可以存在于本地或远程服务器上的其他数据库对象(称为基对象)提供备用名称。
  • 提供抽象层以免对客户端应用程序基对象的名称或位置进行更改。

例如,名为 Server1 的服务器上有 Adventure Works 的 Employee 表。若要从其他服务器 Server2 引用此表,则客户端应用程序必须使用由四个部分构成的名称 Server1.AdventureWorks.Person.Employee。另外,如果更改表的位置(例如,更改为其他服务器),则必须修改客户端应用程序以反映此更改。

若要解决这两个问题,您可以在 Server2 上为 Server1 上的 Employee 表创建一个同义词 EmpTable。这样,客户端应用程序只需使用由一个部分构成的名称 EmpTable 来引用 Employee 表。另外,如果 Employee 表的位置发生变化,则必须修改同义词 EmpTable 以指向 Employee 表的新位置。由于不存在 ALTER SYNONYM 语句,因此必须首先删除同义词 EmpTable,然后重新创建同名的同义词,但是要将同义词指向 Employee 的新位置。

同义词从属于架构,并且与架构中的其他对象一样,其名称必须是唯一的。可以为下列数据库对象创建同义词:

程序集 (CLR) 存储过程

程序集 (CLR) 表值函数

程序集 (CLR) 标量函数

程序集 (CLR) 聚合函数

复制筛选过程

扩展存储过程

SQL 标量函数

SQL 表值函数

SQL 内联表值函数

SQL 存储过程

视图

表1(用户定义)

1 包括本地和全局临时表

ms187552.note(zh-cn,SQL.90).gif注意:
不支持使用函数基对象的四部分名称。

同义词不能是另一个同义词的基对象,也不能引用用户定义聚合函数。

同义词与其基对象之间只是按名称绑定。对基对象的存在性、类型和权限检查都在运行时执行。因此,可以修改或删除基对象,也可以先删除基对象,然后用与原始基对象同名的另一个对象来替换该基对象。例如,有一个引用 Adventure Works 中的 Person.Contact 表的同义词 MyContacts。如果将 Contact 表删除,并用名为 Person.Contact 的视图替换该表,则 MyContacts 将引用 Person.Contact 视图。

同义词的引用不是绑定到架构的。因此,可以随时删除同义词。但删除同义词后,会留下已删除同义词的无关联引用,而只有在运行时才会发现这些引用。

同义词和架构

如果具有不属于您的默认架构并要创建同义词,则必须使用属于您的架构名称限定同义词名称。例如,如果您拥有架构 x,但 y 是默认架构,那么使用 CREATE SYNONYM 语句时,必须在同义词名称前添加架构 x,而不是使用由一个部分构成的名称来命名同义词。有关如何创建同义词的详细信息,请参阅 CREATE SYNONYM (Transact-SQL)

授予同义词的有关权限

只有同义词所有者、db_owner 的成员或 db_ddladmin 的成员才能授予同义词的有关权限。

可以授予、拒绝和撤消对同义词的下列所有权限或任一权限:

CONTROL

DELETE

EXECUTE

INSERT

SELECT

TAKE OWNERSHIP

UPDATE

VIEW DEFINITION

请参阅

概念

所有权链

其他资源

CREATE SYNONYM (Transact-SQL)
DROP SYNONYM (Transact-SQL)

帮助和信息

获取 SQL Server 2005 帮助