SQL Server 2008中SYNONYM的用途是什么?
答案 0 :(得分:68)
在某些企业系统中,您可能必须处理无法控制的远程对象。例如,由其他部门或团队维护的数据库。
同义词可以帮助您从SQL代码中分离底层对象的名称和位置。这样,即使您想要的表被移动到新的服务器/数据库或重命名,您也可以对同义词表进行编码。
例如,我可以写一个这样的查询:
insert into MyTable
(...)
select ...
from remoteServer.remoteDatabase.dbo.Employee
但是如果服务器,数据库,架构或表发生更改,则会影响我的代码。相反,我可以为远程服务器创建一个同义词,并改为使用同义词:
insert into MyTable
(...)
select ...
from EmployeeSynonym
如果底层对象更改位置或名称,我只需要更新我的同义词以指向新对象。
答案 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
现在编写存储过程时 而不是写出来 每次访问时都包含整个别名 表格你可以使用别名 客户端。此外,如果你曾经 更改位置或名称 生产数据库所在地 需要做的是修改一个同义词 而不是必须修改所有的 存储过程参考了 旧服务器。
答案 3 :(得分:4)
似乎(来自here)为另一个表创建别名,以便您可以轻松地引用它。像
一样 select * from table longname as ln
但永久和普遍。
编辑:适用于用户定义的函数,本地和远程对象,而不仅仅是表。
答案 4 :(得分:4)
我是一名长期的Oracle开发人员并且正在跳转到SQL Server。
但是,同义词的另一个重要用途是在开发周期中。如果您有多个开发人员修改相同的模式,您可以使用同义词指向您自己的模式,而不是修改" production"直接表。这使您可以做自己的事情,而其他开发人员在进行修改和调试时不会受到影响。
我很高兴在SQL Server 2008中看到这些......
答案 5 :(得分:4)
同义词是一个用于以下目的的数据库对象:
从未要求第一个问题,但第二个问题非常有用。
答案 6 :(得分:3)
您实际上可以在空数据库中创建同义词,并将其引用到另一个数据库中的对象,从而使其工作正常,即使它位于完全空的数据库中(除了您创建的同义词之外)