オブジェクト名としての識別子の使用

オブジェクトの完全な名前は、サーバー名、データベース名、スキーマ名、およびオブジェクト名の 4 つの識別子で構成されます。各識別子の形式は、次のとおりです。

server_name**.[database_name].[schema_name].**object_name

| database_name**.[schema_name].**object_name

| schema_name**.**object_name

| object_name

サーバー名、データベース名、および所有者名は、オブジェクト名の修飾子です。オブジェクトを参照するときに、サーバー、データベース、および所有者を指定する必要はありません。修飾子の位置をピリオドで示せば、修飾子を省略できます。オブジェクト名の有効な形式には、次のものがあります。

  • server_name**.database_name.schema_name.**object_name

  • server_name**.database_name..**object_name

  • server_name**..schema_name.**object_name

  • server_name**...**object_name

  • database_name**.schema_name.**object_name

  • database_name**..**object_name

  • schema_name**.**object_name

  • object_name

4 つの識別子がすべて指定されたオブジェクト名を完全修飾名と呼びます。Microsoft SQL Server で作成した各オブジェクトには、一意の完全修飾名が必要です。たとえば、テーブルの所有者が異なっていれば、1 つのデータベース内に xyz という名前のテーブルが 2 つあってもかまいません。

ほとんどのオブジェクト参照では、3 つの識別子で構成される名前が使用されます。server_name の既定値はローカル サーバーです。database_name の既定値は、対応する接続の現在のデータベースです。schema_name の既定値は、ステートメントを送信しているユーザーの既定のスキーマです。特に指定がない限り、新しいユーザーの既定のスキーマは dbo スキーマです。

一般的に、4 つの識別子で構成される名前は、分散クエリやリモート ストアド プロシージャ呼び出しで使用します。これらの名前では、次の形式を使用します。

  • linkedserver**.catalog.schema.**object_name

次の表は、各要素の名前とその説明を示しています。

各要素の名前

説明

linkedserver

分散クエリによって参照されるオブジェクトを含むリンク サーバーの名前。

catalog

分散クエリによって参照されるオブジェクトを含むカタログの名前。SQL Server データベースに対してクエリを実行している場合、カタログはデータベース名になります。

schema

分散クエリによって参照されるオブジェクトを含むスキーマの名前。

object_name

オブジェクト名またはテーブル名。

分散クエリの場合、4 部構成の名前のサーバー部分はリンク サーバーを指します。リンク サーバーは、sp_addlinkedserver で定義されるサーバー名です。リンク サーバーは、OLE DB プロバイダと、Microsoft SQL Server で Transact-SQL ステートメントの一部として使用できるレコードセットを返す OLE DB データ ソースを識別します。

OLE DB データ ソース内のどの構成要素を名前のカタログおよびスキーマ部分で使用するかを決定するには、リンク サーバーに対して指定された OLE DB プロバイダのマニュアルを参照してください。リンク サーバーで SQL Server のインスタンスが実行されている場合、カタログ名はオブジェクトを含むデータベースで、スキーマはオブジェクトの所有者です。4 部構成の名前および分散クエリの詳細については、「分散クエリ」を参照してください。

リモート プロシージャ呼び出しの場合、4 部構成の名前のサーバー部分はリモート サーバーを指します。sp_addserver で指定されるリモート サーバーは、ローカル サーバー経由でアクセスされる SQL Server のインスタンスです。次の形式のプロシージャ名を使用して、リモート サーバーでストアド プロシージャを実行します。

  • server**.database.schema_name.**procedure

リモート ストアド プロシージャを使用するときは、名前を構成する 4 つの部分すべてが必要です。リモート サーバーの詳細については、「リモート サーバーの構成」を参照してください。

識別子を使用した列の参照

列名はテーブルまたはビュー内で一意である必要があります。参照する複数のテーブルに同じ名前の列が含まれていることがあるクエリで列を指定するには、最大で 3 つのプレフィックスを使用できます。次のいずれかの形式を使用できます。

  • database_name**.schema_name.object_name.**column_name

  • database_name**..**object_name.column_name

  • schema_name.object_name**.**column_name

  • object_name**.**column_name

ユーザー定義型の列の列プロパティの参照

ユーザー定義型の列のプロパティは、列名とプロパティ名の間に、区切り文字としてピリオド (.) を使用して参照します。プロパティ名を参照するときは、テーブル識別子またはビュー識別子を参照することもできますが、データベース識別子やスキーマ識別子は参照できません。次の形式を使用できます。

  • column_name**.property_name1.**property_name2[…]

  • object_name**.column_name.property_name1.**property_name2[…]