在SQL Server 2008中使用SYNONYM有什么用?
在SQL Server 2008中使用SYNONYM有什么用?
在一些企业系统中,您可能不得不处理您无法控制的远程对象。 例如,由另一个部门或团队维护的数据库。
同义词可以帮助您从SQL代码中分离出底层对象的名称和位置。 这样,即使您要将表移动到新的服务器/数据库或重命名,也可以对同义词表进行编码。
例如,我可以写这样的查询:
insert into MyTable (...) select ... from remoteServer.remoteDatabase.dbo.Employee
但如果服务器,数据库,模式或表更改它会影响我的代码。 相反,我可以为远程服务器创build同义词,并使用同义词代替:
insert into MyTable (...) select ... from EmployeeSynonym
如果底层对象更改位置或名称,则只需要将我的同义词更新为指向新对象。
同义词提供了一个很好的抽象层,使我们能够使用友好的和/或本地名称来expression冗长的表或视图,视图,过程和函数。
例如
考虑将server1
和dbschema作为ABC
,将表名称作为Employee
,现在需要访问Server2
的Employee
表来执行查询操作。
所以你必须像Server1.ABC.Employee
一样使用它公开所有ServerName,SchemaName和TableName。
而不是您可以创build一个同义词链接Create Synonym EmpTable for Server1.ABC.Employee
所以你可以访问像Select * from Peoples p1 inner join EmpTable emp where emp.Id=p1.ID
所以它具有抽象,易变,可扩展性的优点。
稍后,如果您想更改Servername或Schema或Tablename,则只需要单独更改同义词,而不需要search全部内容并将其replace。
如果你使用它,你会感觉到同义词的真正优势。 它也可以与链接服务器结合,为开发者提供更多优势。
如果您在需要访问另一台生产服务器上的客户端表的用户数据库上有存储过程,则此function的实用性的一个示例。 假设您在数据库Users中创build了存储过程,则可能需要设置以下同义词:USE Users; GO CREATE SYNONYM Clients for Offsite01.Production.dbo.Clients; 走
现在当编写存储过程而不是每次访问表时都必须写出整个别名时,可以使用别名客户端。 此外,如果您更改生产数据库位置的位置或名称,则只需修改一个同义词,而不必修改引用旧服务器的所有存储过程。
来自: http : //blog.sqlauthority.com/2008/01/07/sql-server-2005-introduction-and-explanation-to-synonym-helpful-t-sql-feature-for-developer/
似乎(从这里 )为另一个表创build别名,以便您可以轻松地引用它。 就像
select * from table longname as ln
但永久和普遍。
编辑:适用于用户定义的函数,本地和远程对象,而不仅仅是表格。
同义词是一个数据库对象,它服务于以下目的:
- 为另一个数据库对象(称为基础对象)提供替代名称,该名称可以存在于本地或远程服务器上。
- 提供一个抽象层,保护客户端应用程序免受对基础对象的名称或位置所做的更改。
从来没有要求第一个,但第二个问题是相当有帮助的。
MSDN是你的朋友
实际上,你可以在一个空的数据库中创build一个同义词,并将它引用到另一个数据库中的一个对象,从而使它在尽可能完全空的数据库中工作(除了你创build的同义词之外)。
我一直是一个长期的Oracle开发人员,并跳转到SQL Server。
但是,在开发周期中,同义词的另一个重要用途是。 如果有多个开发人员修改相同的模式,则可以使用同义词来指向自己的模式,而不是直接修改“生产”表。 这可以让你做你的事情,其他开发人员将不会受到影响,而你正在进行修改和debugging。
我很高兴在SQL Server 2008中看到这些…