CREATE SYNONYM (Transact-SQL)

创建新的同义词。

主题链接图标Transact-SQL 语法约定

语法

CREATE SYNONYM [ schema_name_1. ] synonym_name FOR < object >

< object > :: =
{
    [ server_name.[ database_name ] . [ schema_name_2 ].| database_name . [ schema_name_2 ].| schema_name_2. ] object_name
}

参数

  • schema_name_1
    指定创建同义词所使用的架构。如果未指定 schema,SQL Server 将使用当前用户的默认架构。

  • synonym_name
    新同义词的名称。

  • server_name
    基对象所在服务器的名称。

  • database_name
    基对象所在数据库的名称。如果未指定 database_name,则使用当前数据库的名称。

  • schema_name_2
    基对象的架构的名称。如果未指定 schema_name,则使用当前用户的默认架构。

  • object_name
    同义词被引用基对象的名称。

注释

创建同义词时不需要基对象存在。SQL Server 将在运行时检查基对象是否存在。

可以为下列对象类型创建同义词:

程序集 (CLR) 存储过程

程序集 (CLR) 表值函数

程序集 (CLR) 标量函数

程序集聚合 (CLR) 聚合函数

复制筛选过程

扩展存储过程

SQL 标量函数

SQL 表值函数

SQL 内联表值函数

SQL 存储过程

视图

表1(用户定义)

1 包括本地和全局临时表

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

在动态 SQL 中可以创建、删除和引用同义词。

权限

若要在给定架构中创建同义词,则用户必须具有 CREATE SYNONYM 权限,并拥有架构或具有 ALTER SCHEMA 权限。

CREATE SYNONYM 权限是可授予的权限。

注意注意

不需要基对象的权限便可成功编译 CREATE SYNONYM 语句,因为基对象的所有权限检查被延迟到运行时进行。

示例

A. 为本地对象创建同义词

以下示例首先为 AdventureWorks 数据库中的基对象 Product 创建同义词,然后查询该同义词。

USE tempdb;
GO
-- Create a synonym for the Product table in AdventureWorks.
CREATE SYNONYM MyProduct
FOR AdventureWorks.Production.Product;
GO

-- Query the Product table by using the synonym.
USE tempdb;
GO
SELECT ProductID, Name 
FROM MyProduct
WHERE ProductID < 5;
GO

下面是结果集。

-----------------------

ProductID Name

----------- --------------------------

1 Adjustable Race

2 Bearing Ball

3 BB Ball Bearing

4 Headset Ball Bearings

(4 row(s) affected)

B. 为远程对象创建同义词

在以下示例中,基对象 Contact 驻留在名为 Server_Remote 的远程服务器上。

EXEC sp_addlinkedserver Server_Remote;
GO
USE tempdb;
GO
CREATE SYNONYM MyEmployee FOR Server_Remote.AdventureWorks.HumanResources.Employee;
GO

C. 为用户定义的函数创建同义词

以下示例创建一个名为 dbo.OrderDozen 的函数,该函数将订单金额增加到整打单位。然后,该示例将为 dbo.OrderDozen 函数创建同义词 dbo.CorrectOrder。

-- Creating the dbo.OrderDozen function
CREATE FUNCTION dbo.OrderDozen (@OrderAmt int)
RETURNS int
WITH EXECUTE AS CALLER
AS
BEGIN
IF @OrderAmt % 12 <> 0
BEGIN
    SET @OrderAmt +=  12 - (@OrderAmt % 12)
END
RETURN(@OrderAmt);
END;
GO

-- Using the dbo.OrderDozen function
DECLARE @Amt int
SET @Amt = 15
SELECT @Amt AS OriginalOrder, dbo.OrderDozen(@Amt) AS ModifiedOrder

-- Create a synonym dbo.CorrectOrder for the dbo.OrderDozen function.
CREATE SYNONYM dbo.CorrectOrder
FOR dbo.OrderDozen;
GO

-- Using the dbo.CorrectOrder synonym.
DECLARE @Amt int
SET @Amt = 15
SELECT @Amt AS OriginalOrder, dbo.CorrectOrder(@Amt) AS ModifiedOrder