データベースの選択

SQL Server のインスタンスのオブジェクトは、大部分がデータベースに保存されます。データベース オブジェクトへの参照はすべて、そのオブジェクトが保存されている特定のデータベースに明示的または暗黙的に解決される必要があります。

データベース参照

Transact-SQL ステートメントで、データが格納されているデータベースを指定した場合は明示的なデータベース参照が発生します。次の例では、AdventureWorks2008R2 データベースを明示的に指定しています。

SELECT BusinessEntityID, LoginID, NationalIDNumber
FROM AdventureWorks2008R2.HumanResources.Employee;

Transact-SQL ステートメントで、データベースを指定しない場合は暗黙的なデータベース参照が発生します。次に例を示します。

SELECT BusinessEntityID, LoginID, NationalIDNumber
FROM HumanResources.Employee;

暗黙的なデータベース参照を解決するために、SQL Server では現在のデータベースという概念を使用します。SQL Server のインスタンスに接続しているときは、常にいずれかのデータベースが現在のデータベースとして設定されています。データベース名が指定されていないオブジェクト参照はすべて、現在のデータベースを参照していると想定されます。たとえば、現在のデータベースとして AdventureWorks2008R2 が設定されている接続の場合、Product という名前のオブジェクトを参照するステートメントは、AdventureWorks2008R2 の Product テーブルに解決されます。

既定のデータベース

SQL Server のすべてのログインには既定のデータベースがあります。sysadmin 固定サーバー ロールのメンバーは、ログインを定義するときにそのログインの既定のデータベースを指定できます。既定のデータベースを指定しなかった場合、そのログインの既定のデータベースは master データベースになります。既定のデータベースは、後で sp_defaultdb ストアド プロシージャを使用して変更できます。

初めて SQL Server のインスタンスに接続するときは、ログインの既定のデータベースが現在のデータベースになるのが一般的です。ただし、接続要求時に特定のデータベースを現在のデータベースとして指定できます。特定のデータベースを指定すると、ログインに指定されている既定のデータベースより優先されます。接続要求時にデータベースを指定するには、次の操作を実行します。

  • sqlcmd ユーティリティでは、データベース名を指定するときに /d スイッチを付けます。

  • ADO では、ADO 接続オブジェクトの Initial Catalog プロパティでデータベース名を指定します。

  • SQL Server Native Client OLE DB プロバイダーでは、DBPROP_INIT_CATALOG プロパティでデータベース名を指定します。

  • SQL Server Native Client ODBC ドライバーでは、Microsoft SQL Server DSN 構成ウィザードの [データベース] ボックスを使用するか、または SQLConfigDataSource への呼び出しで DATABASE = parameter を指定して、ODBC データ ソースのデータベース名を設定できます。"DATABASE=" は、SQLDriverConnect または SQLBrowseConnect の呼び出し時に指定することもできます。

データベースの選択

SQL Server のインスタンスに接続している間に現在のデータベースの設定を切り替えることができます。この操作をデータベースの使用 (選択) といいます。現在のデータベースを切り替えるには、次の操作を実行します。

  • アプリケーションで使用しているデータベース API の種類を問わず、Transact-SQL の USE database_name ステートメントを実行します。

  • SQL Server Management Studio では、[新しいクエリ] をクリックします。クエリ ツール バーの、利用可能なデータベースの一覧からデータベースを選択します。

  • SQL Server Native Client ODBC ドライバーでは、SQLSetConnectAttr を呼び出して SQL_ATTR_CURRENT_CATALOG 接続属性を設定します。

    注意

    SQL Server オンライン ブックの Transact-SQL リファレンスに記載されている例の多くは、コードの 1 行目が USE AdventureWorks2008R2 です。この 1 行を設けることで、現在のデータベース コンテキストではなく明示的に指定したデータベースに対してステートメントが確実に実行されます。