CREATE SYNONYM (Transact-SQL)

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

新しいシノニムを作成します。

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 Database 構文:

CREATE SYNONYM [ schema_name_1. ] synonym_name FOR <object>

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

Note

SQL Server 2014 (12.x) 以前のバージョンの Transact-SQL 構文を確認するには、以前のバージョンのドキュメントを参照してください。

引数

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 では、database_name が現在のデータベースの場合、または database_nametempdb で、object_name# で始まる場合に、3 部構成の名前形式 database_name.[schema_name].object_name がサポートされます。

解説

シノニムの作成時にベース オブジェクトが存在している必要はありません。 SQL Server は、ベース オブジェクトが存在することを実行時に確認します。

  • 次の種類のオブジェクトに対してシノニムを作成することができます。

    • アセンブリ (CLR) ストアド プロシージャ
    • アセンブリ (CLR) テーブル値関数
    • アセンブリ (CLR) スカラー関数
    • アセンブリ (CLR) 集計関数
    • レプリケーション フィルター プロシージャ
    • 拡張ストアド プロシージャ
    • T-SQL スカラー関数
    • T-SQL テーブル値関数
    • T-SQL インラインテーブル値関数
    • T-SQL ストアド プロシージャ
    • テーブル (ユーザー定義、ローカルおよびグローバル一時テーブルを含む)
    • 表示
  • 4 部構成の関数ベース オブジェクト名はサポートされません。

  • シノニムは、動的な 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. ユーザー定義関数に対してシノニムを作成する

次の例では、注文量を 12 ユニットに増やす dbo.OrderDozen という名前の関数を作成します。 次に、シノニム dbo.CorrectOrderdbo.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;

関連項目

次の手順