CREATE SYNONYM (Transact-SQL)

适用于: SQL Server Azure SQL 数据库 Azure SQL 托管实例

创建新的同义词。

Transact-SQL 语法约定

语法

SQL Server 语法:

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
}

Azure SQL 数据库语法:

CREATE SYNONYM [ schema_name_1. ] synonym_name FOR <object>

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

参数

schema_name_1

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

synonym_name

新同义词的名称。

server_name

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

database_name

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

schema_name_2

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

object_name

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

注意

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

备注

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

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

    • 程序集 (CLR) 存储过程
    • 程序集 (CLR) 表值函数
    • 程序集 (CLR) 标量函数
    • 程序集 (CLR) 聚合函数
    • 复制筛选过程
    • 扩展存储过程
    • T-SQL 标量函数
    • T-SQL 表值函数
    • T-SQL 内联表值函数
    • T-SQL 存储过程
    • 表(用户定义,包括本地和全局临时表)
    • 视图
  • 不支持使用函数基对象的四部分名称。

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

  • 同义词是特定于数据库的,其他数据库无法访问。

权限

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

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

注意

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

示例

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

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

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

-- Query the Product table by using the synonym.
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.AdventureWorks2022.HumanResources.Employee;
GO

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

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

-- 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;

请参阅

后续步骤