使用同义词(数据库引擎)
可以在一些 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