Fis*_*ury 69
在某些企业系统中,您可能必须处理无法控制的远程对象.例如,由其他部门或团队维护的数据库.
同义词可以帮助您从SQL代码中分离底层对象的名称和位置.这样,即使您想要的表被移动到新的服务器/数据库或重命名,您也可以对同义词表进行编码.
例如,我可以写一个这样的查询:
insert into MyTable
(...)
select ...
from remoteServer.remoteDatabase.dbo.Employee
Run Code Online (Sandbox Code Playgroud)
但是如果服务器,数据库,架构或表发生更改,它将影响我的代码.相反,我可以为远程服务器创建一个同义词,并使用同义词:
insert into MyTable
(...)
select ...
from EmployeeSynonym
Run Code Online (Sandbox Code Playgroud)
如果底层对象更改位置或名称,我只需要更新我的同义词以指向新对象.
Ram*_*esh 13
同义词提供了一个很好的抽象层,允许我们使用友好和/或本地名称来表示详细命名或远程表,视图,过程和函数.
例如
考虑你有server1和dbschema as 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,稍后您必须单独更改同义词,并且不需要搜索所有内容并替换它们.
如果你使用它比你会感觉到同义词的真正优势.它还可以与链接服务器结合使用,为开发人员提供更多优势.
如果您在Users数据库上有一个需要访问另一个生产服务器上的Clients表的存储过程,则可能是有用的示例.假设您在数据库用户中创建了存储过程,您可能需要设置一个同义词,如下所示:USE Users; 为Offsite01.Production.dbo.Clients创建SYNONYM客户端; 走
现在,在编写存储过程而不是每次访问表时都必须写出整个别名时,您只需使用别名Clients即可.此外,如果您更改了生产数据库位置的位置或名称,则只需修改一个同义词,而不必修改引用旧服务器的所有存储过程.
来自:http://blog.sqlauthority.com/2008/01/07/sql-server-2005-introduction-and-explanation-to-synonym-helpful-t-sql-feature-for-developer/