添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
眼睛小的青蛙  ·  Careers - NL Health ...·  3 周前    · 
爱旅游的保温杯  ·  AWS SQS Input - ...·  1 月前    · 
打盹的水煮肉  ·  <input type="file" ...·  5 月前    · 
火星上的海豚  ·  Dialog - Quasar Framework·  6 月前    · 

例如,考虑位于名为 Server1 的服务器上的 Adventure Works 的 Employee 表。 若要从其他服务器 Server2 引用此表,则客户端应用程序必须使用由四个部分构成的名称 Server1.AdventureWorks.Person.Employee 。 另外,如果更改表的位置(例如,更改为其他服务器),则必须修改客户端应用程序以反映此更改。

要解决这两个问题,你可以在 Server2 上的专用或现有架构 RemoteObjects 中为 Server1 上的 Employee 表创建一个同义词 EmpTable 。 这样,客户端应用程序只需使用由两个部分构成的名称 RemoteObjects.EmpTable 来引用 Employee 表 Server1。 另外,如果 Employee 表的位置发生变化,则必须修改同义词 EmpTable 以指向 Employee 表的新位置。 由于不存在 ALTER SYNONYM 语句,因此必须首先删除同义词 RemoteObjects.EmpTable ,然后重新创建同名的同义词,但是现在要将同义词指向 Employee 的新位置。

同义词从属于架构,并且与架构中的其他对象一样,其名称必须是唯一的。 可以为下列数据库对象创建同义词:

程序集 (CLR) 存储过程

程序集 (CLR) 标量函数

复制筛选过程

SQL 标量函数

SQL 内联表值函数

程序集 (CLR) 表值函数

程序集 (CLR) 聚合函数

SQL 表值函数

SQL 存储过程

表*(用户定义)

*包括本地和全局临时表

不支持使用函数基对象的四部分名称。

同义词不能是另一个同义词的基对象,也不能引用用户定义聚合函数。

同义词与其基对象之间只是按名称绑定。 对基对象的存在性、类型和权限检查都在运行时执行。 因此,可以修改或删除基对象,也可以先删除基对象,然后用与原始基对象同名的另一个对象来替换该基对象。 例如,考虑引用 Adventure Works 中的 Person.Contact 表的同义词 dbo.MyContacts 。 如果将 Contact 表删除,并用名为 Person.Contact 的视图替换该表,则 MyContacts 将引用 Person.Contact 视图。

同义词的引用不是绑定到架构的。 因此,可以随时删除同义词。 但删除同义词后,会留下已删除同义词的无关联引用, 而只有在运行时才会发现这些引用。

同义词和架构

如果具有不属于你的默认架构并要创建同义词,则必须使用属于你的架构名称限定同义词名称。 例如,如果拥有架构 S1 ,但 S2 是默认架构,那么使用 CREATE SYNONYM 语句时,必须在同义词名称前添加架构 S1 ,而不是使用由一个部分构成的名称来命名同义词。 有关如何创建同义词的详细信息,请参阅 CREATE SYNONYM (Transact-SQL)

授予同义词的有关权限

只有同义词所有者、 db_owner 的成员或 db_ddladmin 的成员才能授予同义词的有关权限。

可以 GRANT DENY REVOKE 对同义词的下列所有权限或任一权限:

CONTROL

EXECUTE

SELECT

UPDATE

DELETE

INSERT

TAKE OWNERSHIP

VIEW DEFINITION

使用同义词

可以在一些 SQL 语句和表达式上下文中使用同义词替代其引用的基对象。 以下列包含这些语句和表达式上下文的列表:

SELECT

EXECUTE

INSERT

DELETE

嵌套的 SELECT

在以前说明的上下文中使用同义词时,该基对象会受到影响。 例如,如果某个同义词引用了基对象(表)并且将行插入同义词中,则实际上将行插入到引用的表中。

无法引用位于链接服务器上的同义词。

可以使用同义词作为 OBJECT_ID 函数的参数;但是,函数返回同义词的对象 ID,而不是基对象。

不能在 DDL 语句中引用同义词。 例如,引用名为 dbo.MyProduct 的同义词的下列语句将生成错误:

ALTER TABLE dbo.MyProduct  
   ADD NewFlag int null;  
EXEC ('ALTER TABLE dbo.MyProduct  
   ADD NewFlag int null');  

下列权限语句仅与同义词(而不是基对象)关联:

GRANT

REVOKE

因为同义词不绑定到架构,所以无法通过下列架构绑定表达式上下文引用:

CHECK 约束

默认表达式

绑定到架构的视图

规则表达式

绑定到架构的函数

有关绑定到架构的函数的详细信息,请参阅创建用户定义的函数(数据库引擎)

获取有关同义词的信息

sys.synonyms 目录视图包含给定的数据库中的所有同义词项。 该目录视图将显示同义词元数据,例如同义词的名称和基对象的名称。 有关详细信息,请参阅 sys.synonyms (Transact-SQL)

使用扩展属性,你可以将描述性或说明性文本、输入掩码以及格式化规则添加为同义词的属性。 因为属性存储在数据库中,因此所有读取属性的应用程序都能以相同的方式评估对象。 有关详细信息,请参阅 sp_addextendedproperty (Transact-SQL)

若要查找同义词基对象的基类型,请使用 OBJECTPROPERTYEX 函数。 有关详细信息,请参阅 OBJECTPROPERTYEX (Transact-SQL)

下面的示例将返回同义词基对象(本地对象)的基类型。

USE tempdb;  
CREATE SCHEMA SynSchema
CREATE SYNONYM SynSchema.MyEmployee   
FOR AdventureWorks2022.HumanResources.Employee;  
SELECT OBJECTPROPERTYEX(OBJECT_ID('SynSchema.MyEmployee'), 'BaseType') AS BaseType;  

下面的示例将返回同义词基对象(位于名为 Server1的服务器上的远程对象)的基类型。

EXECUTE sp_addlinkedserver Server1;  
CREATE SYNONYM SynSchema.MyRemoteEmployee  
FOR Server1.AdventureWorks2022.HumanResources.Employee;  
SELECT OBJECTPROPERTYEX(OBJECT_ID('MyRemoteEmployee'), 'BaseType') AS BaseType;  

创建同义词
CREATE SYNONYM (Transact-SQL)
DROP SYNONYM (Transact-SQL)