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

#1楼 票数:69

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

同义词可以帮助您从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/

#2楼 票数:13

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

例如

考虑将server1和dbschema作为ABC ,将表名作为Employee ,现在需要访问Server2Employee表来执行查询操作。

因此,您必须像Server1.ABC.Employee一样使用它公开ServerName,SchemaName和TableName的所有内容。

您可以Create Synonym EmpTable for Server1.ABC.Employee创建同义词链接Create Synonym EmpTable for Server1.ABC.Employee而不是这个

所以你可以Select * from Peoples p1 inner join EmpTable emp where emp.Id=p1.ID

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

如果您想要更改Servername或Schema或tablename,稍后您必须单独更改同义词,并且不需要搜索所有内容并替换它们。

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

#3楼 票数:5

似乎(从这里 )为另一个表创建一个别名,以便您可以轻松地引用它。

select * from table longname as ln

但永久和普遍。

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

#4楼 票数:5

如果您在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/

#5楼 票数:4

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

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

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

#6楼 票数:4

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

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

从来没有要求第一个,但第二个问题是非常有帮助的。

msdn是你的朋友

#7楼 票数:3

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

  ask by Gold translate from so

未解决问题?本站智能推荐:

1回复

有没有一种方法可以列出所有使用SYNONYM的对象(例如VIEW)?

就像锡罐上说的那样。 如何确定哪些SQL对象正在使用给定的SYNONYM? 我想一种方法是搜索PROC或VIEW的所有内容,然后运行一个类似LIKE '%SYN_NAME%'但这似乎很LIKE '%SYN_NAME%' 。
1回复

这些符号是做什么用的?

我浏览了上面的代码,想知道“ {”,“〜`”和“〜”这些符号是做什么用的? 我知道VBA在数组中使用了“ {”,也许这是相似的吗?
1回复

WITH CHECK关键字有什么用

当我运行上面的代码行时,我没有收到错误。 但是,当我在代码行下运行时,出现错误“ ALTER TABLE语句与FOREIGN KEY约束冲突 ” 谁能帮助我了解使用WITH CHECK与不使用WITH CHECK有什么区别?
2回复

PLI关键字有什么用?

在ms sql 2008中编写一些存储过程时,由于我输入了一些变量名,我注意到PLI被突出显示为关键字。 有谁知道PLI用于什么?
1回复

Sqldependency.ID 属性有什么用?

如果在特定表上插入任何新记录,我将使用 Sql Dependency 类来执行事件。 在这里,我已经完全实现了我想要的,现在我想知道最后插入了哪一行,是否有可能找到最后插入的记录的行 ID。 以及SqlDependency.ID属性的用途是什么它创建了 GUID。
1回复

常用表表达式,为什么用分号?

通常在SQL Server公用表表达式子句中,语句前面有分号,如下所示: 为什么?
2回复

什么用作asp.net会员后端? RavenDB或SqlServer

我有一个项目,其中大部分数据都计划保存在RavenDB中。 问题是会员资格。 我在RavenDB中找不到任何(受信任的,受团队欢迎的,受欢迎的)会员提供商,我不想创建自定义的(我不确定我能创建一个像asp.net默认的完美) 。 所以我认为唯一的方法是使用一个sql server数据库和R
2回复

pyodbc - 这里传递的是什么用户名/密码?

我有以下代码: 上面的代码运行得很好。 不过,我有理由相信,这段代码实际上是在“背后”传递某种形式的凭据(可以这么说)。 例如,这段代码: 返回: 即使我没有在第二个连接字符串中指定用户名/密码,pyodbc 似乎也使用了用户名和密码。 如何找出使用的用户名和密码?