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 ローカル一時テーブルとグローバル一時テーブルが含まれます。

4 部構成の関数ベース オブジェクト名はサポートされません。

シノニムは、動的な SQL で作成、削除、および参照できます。

権限

ユーザーが特定のスキーマ内にシノニムを作成するには、CREATE SYNONYM 権限が必要であり、さらにスキーマを所有しているか ALTER SCHEMA 権限が与えられている必要があります。

CREATE SYNONYM 権限は、譲与可能な権限です。

注意

ベース オブジェクトに対する権限のチェックはすべて実行時まで延期されるため、ベース オブジェクトに対する権限を持っていなくても、CREATE SYNONYM ステートメントは正常にコンパイルされます。

A. ローカル オブジェクトに対してシノニムを作成する

次の例では、まず AdventureWorks2008R2 データベース中のベース オブジェクト Product に対してシノニムを作成し、次にシノニムに対してクエリを実行します。

USE tempdb;
GO
-- Create a synonym for the Product table in AdventureWorks2008R2.
CREATE SYNONYM MyProduct
FOR AdventureWorks2008R2.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 行処理されました)

B. リモート オブジェクトに対してシノニムを作成する

次の例では、ベース オブジェクト Contact は、Server_Remote というリモート サーバー上にあります。

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

C. ユーザー定義関数に対してシノニムを作成する

次の例では、注文量をちょうど 1 ダース単位に増やす dbo.OrderDozen という名前の関数を作成します。次に、シノニム 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