データベースを扱う際、複数のデータベースに接続して切り替えながら操作することがあります。
SQL Serverでも同様で、現在操作対象となっているデータベース(コンテキスト)を明示的に切り替えるために使うのが USE コマンドです。
USEコマンドとは?
USEコマンドは、現在のセッションで操作対象とするデータベースを切り替える場合に使用します。
- SQL Serverでは1つの接続で複数のデータベースを扱える
- テーブル名だけではどのデータベースのテーブルか不明確
- USE で明示的に切り替えることで、クエリ時のミスを防ぐ
基本構文と使い方
USE データベース名;
セミコロンは必須ではないが、SQL文を区切る場合に付けます。
SQL Server Management Studio (SSMS) や sqlcmd など、どのクライアントでも同じ書き方です。
例
USE TestDB;
SELECT * FROM dbo.Customers;
TestDB を操作対象に切り替え、切り替え後に dbo.Customers テーブルを参照しています。
実例:切り替えからクエリまで
データベース一覧を確認
まず、現在のSQL Serverインスタンスで利用できるデータベースを確認します。
SELECT name
FROM sys.databases;
データベースを切り替えて確認
USE SalesDB;
GO
SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE';
SalesDB に切り替えた後、テーブル一覧を取得します。
GO はバッチの区切る(SSMSでのみ動作)場合に使用します。
他データベースのテーブルを参照
USE を使わず、3部構文で別DBを直接参照する方法もあります。
SELECT *
FROM InventoryDB.dbo.Products;
ただし長いSQLを書くときには USE で切り替えた方が見やすい場合もある
注意点・よくあるエラー
データベース名のスペルミス
エラー例:Msg 911, Level 16, State 1, Line 1 Database ‘TestDbb’ does not exist. Make sure that the name is entered correctly.
権限不足
USE するには、そのデータベースへの CONNECT 権限が必要
トランザクション内での切り替え
トランザクション開始後に USE するとエラーになる場合がある
一部ツールでのバッチ区切り記法
GO はSSMS独自。スクリプト実行環境によっては不要/使えない
まとめ
- USE コマンドは「データベース切り替え」のための基本コマンド
- 複数DBを扱う際はコードの可読性・安全性向上に役立つ
- 権限やツールごとの書き方の違いに注意
演習問題と解答例
以下の問題を解き、実際にSSMSや sqlcmd で試してみましょう。
- インスタンス内に FinanceDB、HRDB の2つのデータベースが存在
- それぞれに Employees、Departments テーブルがあるものとする
問題1
現在のデータベースを HRDB に切り替え、Employees テーブルから全行を取得するSQL文を書け。
解答1
USE HRDB;
GO
SELECT * FROM dbo.Employees;
問題2
FinanceDB の Departments テーブルの全行を取得するには、USE を使わずにどのように書くか。
解答2
SELECT * FROM FinanceDB.dbo.Departments;
問題3
存在しないデータベース名 Salesdd を指定して USE をした場合、どのようなエラーが返ってくるか。サンプルエラー文を示せ。
解答3
Msg 911, Level 16, State 1, Line 1
Database 'Salesdd' does not exist. Make sure that the name is entered correctly.
問題4
トランザクション内で USE 文を実行したときの注意点を説明せよ。
解答4
- SQL Serverでは同一バッチ内でのトランザクション開始後に USE を実行すると、バッチが分割されトランザクションが自動的にコミットまたはエラーになる
- 通常、トランザクション前に切り替えを済ませることが推奨される
問題5
自分で新しくデータベース TestDB を作成し、USE TestDB; で切り替えた後、テーブルを作成する一連のSQLスクリプトを書け。
解答5
-- データベース作成
CREATE DATABASE TestDB;
GO
-- データベース切り替え
USE TestDB;
GO
-- テーブル作成
CREATE TABLE dbo.SampleTable (
ID INT IDENTITY(1,1) PRIMARY KEY,
Name NVARCHAR(100) NOT NULL,
CreatedDate DATETIME DEFAULT GETDATE()
);
GO