使用同义词(数据库引擎)

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

SELECT

INSERT

UPDATE

DELETE

EXECUTE

嵌套的 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

DENY

REVOKE

 

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

CHECK 约束

计算列

默认的表达式

规则表达式

绑定到架构的视图

绑定到架构的函数

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

示例

以下示例创建将在后续示例中使用的同义词。

USE tempdb;
GO
CREATE SYNONYM MyAddressType
FOR AdventureWorks.Person.AddressType;
GO

以下示例将行插入到由 MyAddressType 同义词引用的基表。

USE tempdb;
GO
INSERT INTO MyAddressType (Name)
VALUES ('Test');
GO

以下示例阐述了如何在动态 SQL 中引用同义词。

USE tempdb;
GO
EXECUTE ('SELECT Name FROM MyAddressType');
GO