CREATE SYNONYM (Transact-SQL)

创建新的同义词。

适用范围:SQL Server(SQL Server 2008 至当前版本),Windows Azure SQL Database(初始版本至当前版本)。

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

语法

-- SQL Server Syntax

CREATE SYNONYM [ schema_name_1. ] synonym_name FOR <object>

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

-- Windows Azure SQL Database Syntax

CREATE SYNONYM [ schema_name_1. ] synonym_name FOR < object >

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

参数

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

  • synonym_name
    新同义词的名称。

  • server_name

    适用于:SQL Server 2008 到 SQL Server 2014。

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

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

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

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

    Windows Azure SQL Database 支持由三部分组成的格式 database_name.[schema_name].object_name,其中 database_name 为当前数据库,database_name 为 tempdb,object_name 以 # 开头。

注释

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

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

程序集 (CLR) 存储过程

程序集 (CLR) 表值函数

程序集 (CLR) 标量函数

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

复制筛选过程

扩展存储过程

SQL 标量函数

SQL 表值函数

SQL 内联表值函数

SQL 存储过程

视图

表1(用户定义)

1 包括本地和全局临时表

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

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

权限

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

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

备注

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

示例

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

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

USE tempdb;
GO
-- Create a synonym for the Product table in AdventureWorks2012.
CREATE SYNONYM MyProduct
FOR AdventureWorks2012.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 的远程服务器上。

适用于:SQL Server 2008 到 SQL Server 2014。

EXEC sp_addlinkedserver Server_Remote;
GO
USE tempdb;
GO
CREATE SYNONYM MyEmployee FOR Server_Remote.AdventureWorks2012.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;

请参阅

参考

DROP SYNONYM (Transact-SQL)

GRANT (Transact-SQL)

EVENTDATA (Transact-SQL)