シノニムを作成する - SQL Server

SQL Serverでシノニムを作成する手順を紹介します。

概要

SQL Serverの「シノニム」は他のオブジェクトを別名で参照できる機能です。シノニムを用いることで、他のデータベースのテーブル、ビュー、ストアドプロシージャーを別名で参照できます。

別名で参照できるメリット

別名で他のデータベースのテーブルや、ビューを参照できることにより、SQLの文中にデータベース名を記述する必要がなくなります。SQL文の実行側のアプリに手を入れることなく、データベース側の設定で参照先のデータベースの変更ができます。

iPentecItem と iPentecProducts データベースがあります。2つのデータベースを参照する以下のSQL文があります。
select * from [iPentecItem].[dbo].item 
inner join [iPentecProducts].[dbo].products
on [iPentecItem].[dbo].item.id = [iPentecProducts].[dbo].products.itemid
状況の変化により、[iPentecProducts].[dbo].products テーブルとではなく、[NiwatoriProducts].[dbo].products テーブルとjoinする必要が出ました。通常であれば、
select * from [iPentecItem].[dbo].item 
inner join [NiwatoriProducts].[dbo].products
on [iPentecItem].[dbo].item.id = [NiwatoriProducts].[dbo].products.itemid
とSQL文を書き換えるのですが、いちいちアプリケーション側のSQL文を書き換えるのは面倒です。 そこで
[iPentecProducts].[dbo].products = TARGETTable
とシノニムを作成することで
select * from [iPentecItem].[dbo].item 
inner join [iPentecItem].[dbo].TARGETTable 
on [iPentecItem].[dbo].item.id = [iPentecItem].[dbo].TARGETTable.itemid
と記述できます。他のデータベースへの参照がなくなるため、
select * from item inner join TARGETTable on item.id = TARGETTable.itemid
とシンプルにSQLを記述できます。、[NiwatoriProducts].[dbo].products テーブルとjoinする必要が出た場合は、シノニムの定義を
[NiwatoriProducts].[dbo].products = TARGETTable
とすることで、SQL文に変更を加えず、結合するデータベースを変更できます。

シノニムの作成手順

SQL Server Management Studio を利用して作成する

SQL Server Management Studio を起動します。左側の[オブジェクト エクスプローラ]のツリービューで、[データベースノード]内にあるデータベースのノードを開きます。[シノニム]ノードがあるのでクリックして選択します。


右クリックします。下図のポップアップメニューが表示されます。メニューの[新しいシノニム]をクリックします。


[新しいシノニム]ダイアログが表示されます。


[シノニム名]にシノニムとして利用する名前を入力します。今回は"ContentsViewLog"とします。入力後[シノニム スキーマ]のテキストボックスの右側の[...]ボタンをクリックします。


[スキーマの検索]ダイアログボックスが表示されます。[選択するオブジェクト名を入力してください]の欄の右側の[参照]ボタンをクリックします。


[オブジェクトの参照]ダイアログボックスが表示されます。


オブジェクトの一覧から[dbo]のオブジェクトの左側のチェックボックスにチェックをします。チェック後[OK]ボタンをクリックします。


選択するオブジェクト名に[dbo]が入力されました。ダイアログの[OK]ボタンをクリックしてダイアログを閉じます。


[シノニム スキーマ]の欄が入力できました。


サーバー名、データベース名、スキーマを設定します。スキーマは[dbo]を設定します。[オブジェクトの種類]コンボボックスを開きます。参照するオブジェクトの種類を選択します。


今回はテーブルを選択します。



[オブジェクト名]のコンボボックスを開きます。テーブルの一覧が表示されます。[ContentsViewLog]テーブルを選択します。


すべての項目が設定できました。ダイアログ右下の[OK]ボタンをクリックします。


シノニムが作成できると、[シノニム]ノードの下に作成されたシノニムの項目が追加されます。


シノニムを利用してSQL文を実行します。データベース名を指定していませんが、他のデータベースにある"ContentsViewLog"テーブルにアクセスできています。


以上でシノニムが作成できました。
著者
iPentec.com の代表。ハードウェア、サーバー投資、管理などを担当。
Office 365やデータベースの記事なども担当。
最終更新日: 2017-09-04
作成日: 2016-11-07
iPentec all rights reserverd.