SQL Server:データベース作成から日本語データ挿入までを一括実行するスクリプト

📋 目次(クリックで展開)

SQL Server(T-SQL)において、データベースの作成からテーブル定義、データ挿入までを1つのスクリプトでエラーなく実行するためのテンプレートです。他セッションによる接続中のエラー回避や、日本語文字化けへの対策を含めています。

スクリプト

-- =======================================================
-- 1. 既存データベースのクリーンアップ
-- =======================================================
USE master;
GO
-- 既に同名データベースが存在する場合、接続を強制切断して削除
IF EXISTS (SELECT * FROM sys.databases WHERE name = N'Cars')
BEGIN
ALTER DATABASE Cars SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
DROP DATABASE Cars;
END
GO
-- =======================================================
-- 2. データベースの新規作成とコンテキストの切り替え
-- =======================================================
CREATE DATABASE Cars;
GO
USE Cars;
GO
-- =======================================================
-- 3. テーブルの作成(日本語対応)
-- =======================================================
-- メーカーテーブル
CREATE TABLE Manufacturers (
manufacturer_id INT PRIMARY KEY IDENTITY(1,1),
name NVARCHAR(100) NOT NULL,
country NVARCHAR(50)
);
-- 車種(モデル)テーブル
CREATE TABLE Models (
model_id INT PRIMARY KEY IDENTITY(1,1),
manufacturer_id INT NOT NULL,
model_name NVARCHAR(100) NOT NULL,
vehicle_type NVARCHAR(50),
FOREIGN KEY (manufacturer_id) REFERENCES Manufacturers(manufacturer_id)
);
-- 車両詳細テーブル
CREATE TABLE Cars (
car_id INT PRIMARY KEY IDENTITY(1,1),
model_id INT NOT NULL,
production_year INT,
color NVARCHAR(30),
mileage INT,
price DECIMAL(10, 2),
status NVARCHAR(20) DEFAULT N'販売中',
FOREIGN KEY (model_id) REFERENCES Models(model_id)
);
GO
-- =======================================================
-- 4. データの挿入(Unicodeプレフィックス付与)
-- =======================================================
-- メーカーの追加
INSERT INTO Manufacturers (name, country) VALUES (N'トヨタ', N'日本');
INSERT INTO Manufacturers (name, country) VALUES (N'フォード', N'アメリカ');
INSERT INTO Manufacturers (name, country) VALUES (N'フォルクスワーゲン', N'ドイツ');
-- 車種の追加
INSERT INTO Models (manufacturer_id, model_name, vehicle_type) VALUES (1, N'カローラ', N'セダン');
INSERT INTO Models (manufacturer_id, model_name, vehicle_type) VALUES (1, N'プリウス', N'ハイブリッド');
INSERT INTO Models (manufacturer_id, model_name, vehicle_type) VALUES (2, N'マスタング', N'クーペ');
INSERT INTO Models (manufacturer_id, model_name, vehicle_type) VALUES (3, N'ゴルフ', N'ハッチバック');
-- 車両詳細の追加
INSERT INTO Cars (model_id, production_year, color, mileage, price) VALUES (1, 2023, N'シルバー', 15000, 20500.00);
INSERT INTO Cars (model_id, production_year, color, mileage, price) VALUES (3, 2022, N'レッド', 8000, 35000.00);
GO
-- =======================================================
-- 5. 実行結果の確認
-- =======================================================
SELECT * FROM Manufacturers;
SELECT * FROM Models;
SELECT * FROM Cars;
GO

データテーブル

上記スクリプトで生成されるデータテーブルは、次の通りです。

Cars

car_id model_id production_year color mileage price status
1 1 2023 シルバー 15000 20500 販売中
2 3 2022 レッド 8000 35000 販売中

Manufacturers

manufacturer_id name country
1 トヨタ 日本
2 フォード アメリカ
3 フォルクスワーゲン ドイツ

Models

car_id model_id production_year color mileage price status
1 1 2023 シルバー 15000 20500 販売中
2 3 2022 レッド 8000 35000 販売中

注意点

データベース削除時の「使用中」エラー対策

データベースが他のセッション(SSMSの別ウィンドウやアプリケーション)から参照されていると、DROP DATABASE は失敗します。 ALTER DATABASE [DB名] SET SINGLE_USER WITH ROLLBACK IMMEDIATE; を実行することで、既存の接続を即座にロールバック(切断)し、安全に削除可能な状態にします。

実行コンテキストの制御(master への退避と GO)

  • 接続中のデータベース自体を削除することはできないため、処理の最初に USE master; を実行してシステムデータベースにコンテキストを移します。

  • CREATE DATABASE の直後にそのデータベース内にテーブルを作成する場合、一連のバッチ処理を区切るために GO コマンドの記述が必要となります。

3. 自動連番の指定方法

SQL Server では自動連番(サロゲートキー)の定義に AUTO_INCREMENT ではなく、IDENTITY(開始番号, 増分) 構文を使用します。

4. 日本語(マルチバイト文字)の文字化け対策

  • データ型: 日本語を格納する列には VARCHAR ではなく、Unicode 対応の NVARCHAR を指定します。

  • リテラル: INSERT 文等で日本語の文字列を扱う際は、文字列の前に N プレフィックス(例: N'トヨタ')を付与します。これを怠ると、データベースの照合順序(Collation)の設定によっては文字化け(???)の原因となります。


💬 コメント