SYNONYM在SQL Server 2008中的作用是什么?
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/同义词提供了很好的抽象层,允许我们使用友好和/或本地名称来代替冗长命名或远程表、视图、过程和函数。
例如
假设你有Server1
和ABC
作为dbschema以及Employee
作为表名称,现在您需要访问Server2
中的Employee
表以执行查询操作。
因此,您必须使用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
因此它提供了抽象、易于更改、可伸缩性等优点。
如果以后您想要更改服务器名称、模式或表名称,只需更改同义词即可,无需搜索并替换它们。
如果您使用它,就可以感受到同义词的真正优势。它还可以与链接服务器组合使用,并为开发人员提供更多优势。
select * from table longname as ln
,但是永久且普遍。
编辑:适用于用户定义的函数、本地和远程对象,不仅仅是表格。我一直是一个长期使用Oracle的开发者,现在正在转向SQL Server。
但是,在开发周期中,另一个伟大的同义词用途是。如果有多个开发人员修改同一个模式,您可以使用同义词来指向自己的模式,而不是直接修改“生产”表。这样,您可以进行您的操作,而其他开发人员在您进行修改和调试时不会受到影响。
我很高兴看到这些在SQL Server 2008中...
同义词是一个数据库对象,具有以下用途:
我从未需要第一个,但第二个问题相当有帮助。
您可以在空数据库中创建同义词,并将其引用到另一个数据库中的对象,从而使其在完全空的数据库中正常工作(除了您创建的同义词)。