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;ENDGO
-- =======================================================-- 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)の設定によっては文字化け(???)の原因となります。
💬 コメント