シノニム (データベース エンジン)

シノニムは、次の目的を果たすデータベース オブジェクトです。

  • ローカル サーバーまたはリモート サーバー上に存在できる別のデータベース オブジェクト (ベース オブジェクトと呼ばれます) の代替名を提供します。

  • 基本オブジェクトの名前または場所に加えられた変更からクライアント アプリケーションを保護する抽象化レイヤーを提供します。

たとえば、Server1 という名前のサーバーにある Adventure Works の Employee テーブルを考えてみましょう。 別のサーバー Server2 からこのテーブルを参照するには、クライアント アプリケーションで 4 部構成の名前 Server1.AdventureWorks.Person.Employee を使用する必要があります。 また、テーブルの場所が別のサーバーなどに変更される場合は、その変更を反映するようにクライアント アプリケーションを変更する必要があります。

これらの両方の問題に対処するには、Server1 の Employee テーブルに対して Server2 にシノニム EmpTable を作成します。 これで、クライアント アプリケーションは、Employee テーブルを参照するために、単一部分の名前 EmpTable のみを使用する必要があります。 また、Employee テーブルの場所が変更された場合は、Employee テーブルの新しい場所を指すシノニム EmpTable を変更する必要があります。 ALTER SYNONYM ステートメントがないため、最初にシノニム EmpTable を削除してから、同じ名前でシノニムを再作成する必要がありますが、そのシノニムは Employee の新しい場所を指します。

シノニムはスキーマに属しており、スキーマ内の他のオブジェクトと同様に、シノニムの名前は一意である必要があります。 次のデータベース オブジェクトのシノニムを作成できます。

アセンブリ (CLR) ストアド プロシージャ アセンブリ (CLR) テーブル値関数
アセンブリ (CLR) スカラー関数 アセンブリ (CLR) 集計関数
複製フィルター手順 拡張ストアド プロシージャ
SQL スカラー関数 SQL テーブル値関数
SQL インライン テーブル値関数 SQL ストアド プロシージャ
表示 表1 (ユーザー定義)

1 ローカルおよびグローバル一時テーブルを含む

注

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

シノニムを別のシノニムの基本オブジェクトにすることはできません。また、シノニムがユーザー定義集計関数を参照することはできません。

シノニムとその基本オブジェクトの間のバインディングは、名前によってのみ行われます。 基本オブジェクトに対するすべての存在、型、およびアクセス許可のチェックは、実行時まで延期されます。 したがって、ベース オブジェクトは、元のベース オブジェクトと同じ名前を持つ別のオブジェクトに変更、削除、またはドロップして置き換えることができます。 たとえば、Adventure Works の Person.Contact テーブルを参照するシノニム MyContacts があるとします。 連絡先テーブルが削除され、Person.Contact という名前のビューに置き換えられた場合、MyContacts は Person.Contact ビューを参照するようになりました。

シノニムへの参照はスキーマ バインドではありません。 そのため、シノニムはいつでも削除できます。 ただし、シノニムを削除すると、削除されたシノニムへの未解決の参照が残るリスクが発生します。 これらの参照は実行時にのみ見つかります。

シノニムとスキーマ

所有していない既定のスキーマがあり、シノニムを作成する場合は、シノニム名を所有するスキーマの名前で修飾する必要があります。 たとえば、スキーマ x を所有しているが、 y が既定のスキーマであり、 CREATE SYNONYM ステートメントを使用する場合は、シノニムに単一部分の名前を使用して名前を付けるのではなく、シノニムの名前の前にスキーマ x を付ける必要があります。 シノニムを作成する方法の詳細については、「 CREATE SYNONYM (Transact-SQL)」を参照してください。

シノニムに対するアクセス許可の付与

シノニムの所有者、 db_ownerのメンバー、または db_ddladmin のメンバーのみが、シノニムに対するアクセス許可を付与できます。

シノニムに対して、次のアクセス許可のすべてまたはいずれかを GRANT、 DENY、 REVOKE できます。

コントロール DELETE
実行する INSERT
SELECT 責任を引き受ける
UPDATE VIEW 定義

シノニムの使用

複数の SQL ステートメントおよび式コンテキストで、参照される基本オブジェクトの代わりにシノニムを使用できます。 次の表に、これらのステートメントと式コンテキストの一覧を示します。

SELECT INSERT
UPDATE DELETE
実行する サブ選択

前述のコンテキストでシノニムを操作している場合、基本オブジェクトが影響を受けます。 たとえば、シノニムがテーブルである基本オブジェクトを参照し、そのシノニムに行を挿入する場合、実際には参照先テーブルに行を挿入します。

注

リンク サーバーにあるシノニムを参照することはできません。

OBJECT_ID関数のパラメーターとしてシノニムを使用できます。ただし、この関数はベース オブジェクトではなく、シノニムのオブジェクト ID を返します。

DDL ステートメントでシノニムを参照することはできません。 たとえば、 dbo.MyProduct というシノニムを参照する次のステートメントでは、エラーが発生します。

ALTER TABLE dbo.MyProduct  
   ADD NewFlag int null;  
EXEC ('ALTER TABLE dbo.MyProduct  
   ADD NewFlag int null');  

次のアクセス許可ステートメントは、基本オブジェクトではなく、シノニムにのみ関連付けられます。

GRANT DENY
REVOKE

シノニムはスキーマ バインドではないため、次のスキーマ バインド式コンテキストでは参照できません。

CHECK 制約 計算列
既定値式 ルール表現
スキーマにバインドされたビュー スキーマに束縛された関数

スキーマ バインド関数の詳細については、「 ユーザー定義関数の作成 (データベース エンジン)」を参照してください。

シノニムに関する情報の取得

sys.synonyms カタログ ビューには、特定のデータベース内の各シノニムのエントリが含まれています。 このカタログ ビューでは、シノニムの名前やベース オブジェクトの名前などのシノニム メタデータが公開されます。 sys.synonyms カタログ ビューの詳細については、「sys.synonyms (Transact-SQL)」を参照してください。

拡張プロパティを使用すると、シノニムのプロパティとして、説明的または説明的なテキスト、入力マスク、および書式設定ルールを追加できます。 プロパティはデータベースに格納されるため、プロパティを読み取るすべてのアプリケーションは、同じ方法でオブジェクトを評価できます。 詳細については、「 sp_addextendedproperty (Transact-SQL)」を参照してください。

シノニムの基本オブジェクトの基本型を検索するには、OBJECTPROPERTYEX 関数を使用します。 詳細については、 OBJECTPROPERTYEX (Transact-SQL) を参照してください。

例示

次の例では、ローカル オブジェクトであるシノニムの基本オブジェクトの基本型を返します。

USE tempdb;  
GO  
CREATE SYNONYM MyEmployee   
FOR AdventureWorks2012.HumanResources.Employee;  
GO  
SELECT OBJECTPROPERTYEX(OBJECT_ID('MyEmployee'), 'BaseType') AS BaseType;  

次の例では、 Server1 という名前のサーバー上にあるリモート オブジェクトであるシノニムの基本オブジェクトの基本型を返します。

EXECUTE sp_addlinkedserver Server1;  
GO  
CREATE SYNONYM MyRemoteEmployee  
FOR Server1.AdventureWorks2012.HumanResources.Employee;  
GO  
SELECT OBJECTPROPERTYEX(OBJECT_ID('MyRemoteEmployee'), 'BaseType') AS BaseType;  
GO  

シノニムの作成

CREATE SYNONYM (Transact-SQL)

DROP SYNONYM (Transact-SQL)