日常の業務で、Excel やシステムから出力した CSV(カンマ区切りのテキストファイル)を SQL Server に取り込みたいという場面はよくあります。
しかし、
- 「SSMS(SQL Server Management Studio)を毎回起動して SQL を手で実行するのは大変…」
- 「IT に詳しくないので、できれば簡単に処理したい…」
という声も多いでしょう。
そこで本記事では、SQL Server の BULK INSERT(バルクインサート) という機能を使って、
CSV を高速に取り込む方法を解説します。さらに簡単に実行できるように ダブルクリックだけで 取り込めるファイルを作成するところまで丁寧にステップを踏んで解説します。
SQL Server を活用するには何がともあれデータをサーバーに保管しないことには始まりません。
SQL Server 活用の第一歩としてこの知識を是非参考にしてみて下さい。
まず知っておくべき基本用語
読み進める前に、このあと登場する主要用語を短く整理しておきます。
CSV / テキストファイル
Excel から「名前を付けて保存」で書き出せる形式の1つ。
中身はただのテキストで、次のように一つ一つのデータが「カンマ」で区切られています。
SaleDate,Product,Quantity,Amount
2025-11-01,WidgetA,10,1250
2025-11-02,WidgetB,5,800
テーブル
SQL Server のデータの置き場。Excel の「テーブル」のようなものです。
各列の列名が決まっていて、データは1行ずつ入っている単純な表形式のデータと理解しておけばOKです。
BULK INSERT
CSV などのテキストファイルのデータを 高速に SQL Server へ取り込むためのコマンドです。
通常のSQLコマンドの INSERT 文で1行ずつ追加するより圧倒的に高速です。
SSMS(SQL Server Management Studio)
SQL Server の管理ツール。プログラムの開発ツールのような画面で一般のユーザーには少しとっつきにくいかもしれません。
この記事では SSMSを使わずに SQL Server にコマンドを実行する方法を紹介していきます。
sqlcmd.exe
SQLコマンドをコマンドラインから実行できる便利なツールです。
SSMS を起動しなくても .bat ファイルから SQL を実行できます。
これを使うことで「ダブルクリックで取り込み」が実現できます。
準備(環境とファイル)
この記事の手順を実行するために必要なものをまとめます。
SQL Server
会社のサーバ または 自分の PC に SQL Server がインストールされていること。
以下のサーバーへの接続情報を入手しましょう。
- サーバ名(例:MY-SERVER\SQLEXPRESS)
- データベース名(例:MyDatabase)
もし不明なら 接続する SQL Server の管理者に確認してください。
BULK INSERT を実行する権限
通常のユーザーには権限が無いのが一般的です。SQL Server の管理者に依頼すれば権限を設定してくれるでしょう。
「取り込み用の権限をください」と言えば通じるでしょう。
sqlcmd.exe(SSMS がなくても利用可)
SQL Server に SQLコマンド を実行させるためのコマンドです。
SQL Server をインストールすると同時にインストールされます。
おおよその場所は以下のどれかです。ご自分の環境で探してみて下さい。
C:\Program Files\Microsoft SQL Server\Client SDK\ODBC\NNN\Tools\Binn\sqlcmd.exe
C:\Program Files\Microsoft SQL Server\NNN\Tools\Binn\sqlcmd.exe
取り込む CSV ファイルの準備
この記事では例として次の CSV ファイルを用意します。内容をメモ帳に張り付けて保存します。
- ファイル名:sales_2025-11.csv
- フォルダ:C:\data\
SaleDate,Product,Quantity,Amount
2025-11-01,WidgetA,10,1250
2025-11-02,WidgetB,5,800
取り込み先テーブルを作る(手順)
CSV を取り込むためには、まず 受け皿となるテーブル を作る必要があります。
ここではサンプル CSV の内容に合わせて、次のようなテーブルを作成します。
- 日付(SaleDate)
- 商品名(Product)
- 個数(Quantity)
- 金額(Amount)
テーブル作成の基本ルール
テーブル作成には次の3つさえ押さえれば大丈夫です。
- 列名(カラム名)→ CSV の項目に合わせる
- データ型 → 日付、文字列、数値などを指定
- NULL を許可するか → データが必ず入る場合は NOT NULL、迷ったら NULL でOK
サンプル SQL
以下の SQLコマンド を実行すると、上記で解説した内容の取り込み用テーブルが作られます。
コマンドの中に列名が含まれているのが分かると思います。
IF OBJECT_ID('dbo.SalesImport', 'U') IS NOT NULL
DROP TABLE dbo.SalesImport;
CREATE TABLE dbo.SalesImport (
SaleDate date NULL,
Product nvarchar(100) NULL,
Quantity int NULL,
Amount decimal(10,2) NULL
);
実行方法
SSMS で次の手順で実行して下さい。
- メニューの「新しいクエリ」をクリック
- 上の SQL を貼り付ける
- 実行ボタンをクリック
BULK INSERT の基本 — コマンドの構成とオプション
ここでは、CSV をテーブルに読み込むための BULK INSERT の基本構成を説明します。
BULK INSERT の基本形
BULK INSERT <テーブル名>
FROM '<ファイルパス>'
WITH (
FIELDTERMINATOR = '<区切り文字>',
ROWTERMINATOR = '<行区切り>',
FIRSTROW = <開始行番号>,
CODEPAGE = '<文字コード>',
TABLOCK
);
CSV を取り込むときは、この形を少し書き換えるだけでOKです。
よく使うオプション
FIELDTERMINATOR
区切り文字を指定します。CSV なら カンマ 区切りなので下記のように設定します。
FIELDTERMINATOR = ','
ROWTERMINATOR
行末の区切り。`\n’ は改行文字を表しています。基本的にはこれでOKです。
ROWTERMINATOR = '\n'
FIRSTROW
データ本体の始まる行を指定します。例えば、1行目に「列名」が入っている場合は 2行目からがデータなので、「2」 を指定します。
FIRSTROW = 2
CODEPAGE(重要)
読み込むファイル文字コードを指定します。
- ANSI(Shift_JIS)の場合 → CODEPAGE = ‘ACP’
- UTF-8 の場合 → CODEPAGE = ‘65001’
文字コードの確認方法
文字コードが異なるとデータが文字化けしてしまいます。
テキストファイルの文字コードを確認するには、次のようにして確認します。
- Windows 標準のメモ長アプリでファイルを開く
- ウィンドウの右下の表示を確認する

文字コードの変更方法
テキストファイルの文字コードを変更するのも Windows 標準 のメモ帳でできます。
「名前を付けて保存」をして、図のようにエンコードの部分を変更してから「保存(s)」ボタンを押します。

TABLOCK
取り込み速度が速くなるため設定しておきましょう。
サンプル:CSV を読み込む BULK INSERT
BULK INSERT dbo.SalesImport
FROM 'C:\data\sales_2025-11.csv'
WITH (
FIRSTROW = 2,
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n',
CODEPAGE = '65001', -- UTF-8 の場合(Shift_JISなら 'ACP')
TABLOCK
);
SELECT COUNT(*) AS ImportedRows FROM dbo.SalesImport;
失敗したときの対処(よくある3つ)
パスが見つからない
ファイルがサービスアカウントから参照できない場合があります。
C:\data\ のようなローカルパスに置くのが安全です。
文字化け
CODEPAGE が違う可能性大です。上記の方法で確認してみましょう。
データ型エラー
CSV に空白や余計な記号があるケースが多い。
Excel で開いて不要な列を削除しておくと改善する可能性があります。
よくあるデータ形式の取り込み例(実践)
BULK INSERT は CSV だけでなく、さまざまな形式に対応します。
ここではよく使われるパターンをいくつか紹介します。
カンマ区切り(標準的な CSV)
最もよく使うパターンです。
BULK INSERT dbo.SalesImport
FROM 'C:\data\sales.csv'
WITH (
FIRSTROW = 2,
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n'
);
タブ区切り(TSV)
システム出力でよく使われます。
FIELDTERMINATOR = '\t'
ヘッダなし CSV
FIRSTROW = 1
sqlcmd.exe とは — SSMS を使わず SQL を実行する道具
日常業務で SQL を少し触る程度のユーザーにとって、SSMS(SQL Server Management Studio)を使いこなすのは負担が大きいと思います。
テキストファイルの取り込みのように毎回同じ処理をするだけなら、ファイルをクリックするだけで処理できるようにしたいものです。
そこで登場するのが sqlcmd.exe です。
sqlcmd.exe の役割
- SQL 文をファイルから読み込み
- SQL Server に対して実行し
- 結果を画面やログに出力する
SSMS の「実行」ボタンを押す代わりに、コマンドラインから SQL を流してくれるツールです。
sqlcmd.exe はどこにある?(探し方)
多くの環境では次のいずれかにあります。
C:\Program Files\Microsoft SQL Server\Client SDK\ODBC\*\Tools\Binn\sqlcmd.exe
C:\Program Files\Microsoft SQL Server\*\Tools\Binn\sqlcmd.exe
次のようにして探してみて下さい。
- エクスプローラで C:\Program Files\Microsoft SQL Server を開く
- 「sqlcmd」で検索
- 表示されたパスをコピーしておく
sqlcmd.exe の基本構文
sqlcmd -S <サーバ名> -d <データベース名> -E -i <SQLファイル>
-S:サーバ名
例:MY-SERVER\SQLEXPRESS
-d:データベース名
例:MyDatabase
-E:Windows認証
会社のPCはほぼこれでOKです。会社のネットワークにログインする際の認証をそのまま利用します。
SQL 認証
SQL Server 上でユーザーを作成している場合は、以下のようにしてユーザー名、パスワードを直接記入して接続します。
sqlcmd -S サーバー名 -U ユーザー名 -P パスワード
-i:実行したい SQL ファイル
例:import.sql
BULK INSERT を SQL ファイルとして保存する
csv の取り込み処理を毎回書くのは面倒なので、
SQL 文をファイルとして保存し、sqlcmd.exe に渡すようにします。
SQL ファイルを作る
例として次のファイルを作ります:
- ファイル名:import_sales.sql
- 保存場所:C:\import\
以下の中身をメモ帳に張り付けて、UTF-8(BOM なし推奨)で保存して下さい。
PRINT '=== BULK INSERT START ===';
TRUNCATE TABLE dbo.SalesImport;
BULK INSERT dbo.SalesImport
FROM 'C:\data\sales_2025-11.csv'
WITH (
FIRSTROW = 2,
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n',
CODEPAGE = '65001',
TABLOCK
);
PRINT '=== BULK INSERT END ===';
SELECT COUNT(*) AS ImportedRows FROM dbo.SalesImport;
TRUNCATE TABLE はテーブルを空にする
毎回取り込み前にテーブルを空にするために TRUNCATE TABLE コマンドを実行するようになっています。
過去データを残したい場合はこのコマンド行は削除してください。
SQL ファイルでよくあるトラブル
文字コードが原因でエラー
文字コードの設定を確認して下さい。UTF-8 (「BOM付き」ではない方)が推奨です。
ファイルパスに全角文字が含まれている
漢字やひらがななどの全角文字が含まれている場合にエラーになる可能性があります。
特に「~」など特殊な文字がファイルパスに含まれていると文字コードの解釈の差でエラーになることがあります。
怪しい文字を一つずつ消してみて原因を探すということも場合によっては必要になります。
バッチファイル(.bat)を作る — ダブルクリックで自動実行
いよいよ、クリックだけで取り込めるようにします。
バッチファイルとは?
Windows のコマンドをまとめて書いておき、ファイルを ダブルクリックするだけで実行できる仕組みです。
バッチファイルを作成する(手順)
以下のファイルを作ります:
- ファイル名:import_sales.bat
- 場所:C:\import\
メモ帳に以下の中身を張り付けてファイルを保存して下さい。
@echo off
echo === SALES DATA IMPORT START ===
"C:\Program Files\Microsoft SQL Server\Client SDK\ODBC\170\Tools\Binn\sqlcmd.exe" ^
-S MY-SERVER\SQLEXPRESS ^
-d MyDatabase ^
-E ^
-i "C:\import\import_sales.sql"
echo === SALES DATA IMPORT END ===
pause
前述(図)のようにファイルのパスに日本語が含まれている場合は、バッチファイルは文字コードが ANSI(Shift JIS) でないと正しく動作しません。
ポイント解説
2つのファイルの関係
ここまでで SQL ファイル(*.sql)とバッチファイル(*.bat)の2つを作成しました。
ファイルが2つも出てきてややこしくなったかもしれませんが、図のように2つのファイルをリレーしてコマンドを実行しているということを頭に入れておきましょう。

sqlcmd.exe のパス
前章で調べた場所を正確に貼り付けること。
-S:サーバ名
会社の SQL Server のサーバ名に変更。
pause
実行結果がすぐ閉じないようにするため。
完成!CSV をダブルクリックで取り込む流れ
実運用では以下の流れになります。
毎日やる作業
ファイルサーバに届いた CSV を
- C:\data\sales_2025-11.csv に置く
- import_sales.bat を ダブルクリック
- 「取り込み完了」と表示される
- SQL Server のテーブルにデータが入っている
これでSSMSを開く必要はありません。
失敗したときにまず確認すること
- CSV のファイル名が変わっていないか
- CSV のエンコード
- sqlcmd.exe のパス
- サーバに接続できているか
現場で多いトラブルの多くは ファイル名の変更 と パスの間違い です。
発展編:ファイル名を自動で切り替える(応用)
実務では「日付入りの CSV」がよく流れてきます。
例:
sales_2025-11.csv
sales_2025-12.csv
毎回 SQL を書き換えるのは大変なので、バッチ側で最新ファイルを自動判定することも可能です。
バッチファイル
for %%F in (C:\data\sales_*.csv) do set TARGET=%%F
sqlcmd -S ... -i import_sales.sql -v FILE="%TARGET%"
-v オプションで SQL ファイルの指定のパラメータを渡します。
SQL ファイル
BULK INSERT dbo.SalesImport
FROM '$(FILE)'
WITH (...)
''$(FILE)'' の部分にバッチファイルで指定したパラメータが埋め込まれて実行されます。
まとめ
SQL Server を使うならまずデータベースにデータを保管することから始める必要があります。
この記事のように BULK INSERT コマンドをバッチファイルと sqlcmd.exe を使って呼び出すことで、一般のユーザーでも簡単に SQL Server にデータを保管することが可能です。
データが SQL Server に入ったら Excel の Power Query から簡単にデータを取り出すことができ、マウス操作でデータ処理も簡単にできてしまいます。
SQL Server + Excel の強力なタッグを活用するためにも、大量なデータを SQL Server に保管する仕組みを構築する必要があります。
今回の記事を参考にして大量のデータを SQL Server に保管して活用する仕組みを構築してみて下さい。

