SYNONYM有什么用?

时间:2009-08-07 17:28:55

标签: sql-server-2008

SQL Server 2008中SYNONYM的用途是什么?

7 个答案:

答案 0 :(得分:68)

在某些企业系统中,您可能必须处理无法控制的远程对象。例如,由其他部门或团队维护的数据库。

同义词可以帮助您从SQL代码中分离底层对象的名称和位置。这样,即使您想要的表被移动到新的服务器/数据库或重命名,您也可以对同义词表进行编码。

例如,我可以写一个这样的查询:

insert into MyTable
(...)
select ... 
from remoteServer.remoteDatabase.dbo.Employee

但是如果服务器,数据库,架构或表发生更改,则会影响我的代码。相反,我可以为远程服务器创建一个同义词,并改为使用同义词:

insert into MyTable
(...)
select ... 
from EmployeeSynonym

如果底层对象更改位置或名称,我只需要更新我的同义词以指向新对象。

http://www.mssqltips.com/sqlservertip/1820/use-synonyms-to-abstract-the-location-of-sql-server-database-objects/

答案 1 :(得分:13)

同义词提供了一个很好的抽象层,允许我们使用友好和/或本地名称来表示详细命名或远程表,视图,过程和函数。

例如

假设您将server1和dbschema设为ABC,将表名设为Employee,现在您需要访问Employee中的Server2表格执行查询操作。

所以你必须像Server1.ABC.Employee一样使用它暴露所有ServerName,SchemaName和TableName。

您可以创建同义词链接Create Synonym EmpTable for Server1.ABC.Employee

,而不是这样

因此您可以访问Select * from Peoples p1 inner join EmpTable emp where emp.Id=p1.ID

因此它具有抽象,易于更改,可扩展性的优点。

如果您想要更改Servername或Schema或tablename,您只需要更改同义词,就不需要搜索所有内容并替换它们。

如果您使用它,您将感受到同义词的真正优势。它还可以与链接服务器结合使用,为开发人员提供更多优势。

答案 2 :(得分:5)

  

这是有用的一个例子   可能是你有一个存储过程   在需要的用户数据库上   访问另一个客户端表   生产服务器。假设你   在。中创建了存储过程   数据库用户,您可能想要设置   一个同义词,如下所示:   使用用户;去创建SYNONYM客户端   FOR Offsite01.Production.dbo.Clients;   GO

     

现在编写存储过程时   而不是写出来   每次访问时都包含整个别名   表格你可以使用别名   客户端。此外,如果你曾经   更改位置或名称   生产数据库所在地   需要做的是修改一个同义词   而不是必须修改所有的   存储过程参考了   旧服务器。

来自:http://blog.sqlauthority.com/2008/01/07/sql-server-2005-introduction-and-explanation-to-synonym-helpful-t-sql-feature-for-developer/

答案 3 :(得分:4)

似乎(来自here)为另一个表创建别名,以便您可以轻松地引用它。像

一样

select * from table longname as ln

但永久和普遍。

编辑:适用于用户定义的函数,本地和远程对象,而不仅仅是表。

答案 4 :(得分:4)

我是一名长期的Oracle开发人员并且正在跳转到SQL Server。

但是,同义词的另一个重要用途是在开发周期中。如果您有多个开发人员修改相同的模式,您可以使用同义词指向您自己的模式,而不是修改" production"直接表。这使您可以做自己的事情,而其他开发人员在进行修改和调试时不会受到影响。

我很高兴在SQL Server 2008中看到这些......

答案 5 :(得分:4)

同义词是一个用于以下目的的数据库对象:

  • 为另一个数据库对象提供备用名称,称为基础对象,可以存在于本地或远程服务器上。
  • 提供一个抽象层,保护客户端应用程序免受对基础对象的名称或位置所做的更改。

从未要求第一个问题,但第二个问题非常有用。

msdn is your friend

答案 6 :(得分:3)

您实际上可以在空数据库中创建同义词,并将其引用到另一个数据库中的对象,从而使其工作正常,即使它位于完全空的数据库中(除了您创建的同义词之外)