【SQL Server】バッチファイルからsqlcmdコマンドを使用して、SQLを実行する

この記事では
 ・バッチファイルから
 ・sqlcmdコマンドを使用して
 ・INSERT文を実行
するサンプルプログラムを記載します!

バッチファイルから
 ・SQLを直接実行
 ・SQLファイルを実行
する方法を記載します!

PR

サンプルプログラムの概要

テーブル「EMPLOYEE」に対し、INSERT文を実行します。

テーブル「EMPLOYEE」の内容
テーブル「EMPLOYEE」の内容

↑実行前は何も登録されていません。

PR

SQLファイル作成

INSERT文を記載したSQLファイルを作成します。

ファイル名

INSERT.sql

サンプルプログラム

INSERT INTO EMPLOYEE(
	ID,
	NAME,
	SEX,
	SECTION
)
VALUES(
	'00002',
	'佐藤次郎', 
	'男', 
	'経理課'
)
PR

バッチファイル作成

以下2つを実行するバッチファイルを作成します。
・SQL文(INSERT文)
・上記で作成したSQLファイル

ファイル名

insert_sample.bat

サンプルプログラム

@echo off

REM #####################
REM ★接続情報
REM #####################
REM サーバー名(サーバーのPC名\インスタンス名)
set dbServer=localhost\SQLEXPRESS
REM データベース名
set dbName=sampleDB
REM ユーザー名
REM set userName=XXXXX
REM パスワード
REM set password=XXXXX

REM #####################
REM Windows認証の場合
REM #####################
REM ★SQLを直接実行
sqlcmd -S %dbServer% -d %dbName% -E -Q "INSERT INTO EMPLOYEE(ID,NAME,SEX,SECTION) VALUES('00001','鈴木一郎','男','営業課')"
REM ★SQLファイルを実行
sqlcmd -S %dbServer% -d %dbName% -E -i INSERT.sql

REM #####################
REM SQL Server認証の場合
REM #####################
REM ★SQLを直接実行
REM sqlcmd -S %dbServer% -d %dbName% -U %userName% -P %password% -Q "INSERT INTO EMPLOYEE(ID,NAME,SEX,SECTION) VALUES('00001','鈴木一郎','男','営業課')"
REM ★SQLファイルを実行
REM sqlcmd -S %dbServer% -d %dbName% -U %userName% -P %password% -i INSERT.sql

pause

★「サーバー名」等の接続情報について
上部に変数として纏めています。環境に合わせて修正してください。

★「SQLを直接実行」の場合(19行目)
Qオプションを指定して、実行するSQLを記載してください。

★「SQLファイルを実行」の場合(22行目)
iオプションを指定して、実行するSQLファイルを記載してください。

上記はWindows認証を使用してSQL Serverへ接続しています。
SQL Server認証を使用した方法も記載していますが、コメントアウトしています。
※オプション「-E」により「Windows認証」となります。

上記は以下により計2レコードをINSERTしています。
・SQLを直接実行
・SQLファイルを実行


上記で使用している「sqlcmd」の各オプションと指定する値は以下です。

オプション  指定する値  
-Sサーバー名
-dDB名
-Uユーザー名
-Pパスワード
-QSQL文
-iSQLファイル
上記で使用しているオプションと指定する値


※「sqlcmd」のオプションの一覧は以下の記事にまとめています。

PR

実行結果

バッチファイルを実行すると、計2レコードがINSERTされた旨のメッセージが表示されます。

(1 行処理されました)

(1 行処理されました)
続行するには何かキーを押してください . . .


SELECT文でテーブル「EMPLOYEE」を確認すると、計2レコードがINSERTされていることを確認できます。

テーブル「EMPLOYEE」の内容
テーブル「EMPLOYEE」の内容


SQLファイル(INSERT.sql)を修正することで、
 ・バッチファイルは修正せずに実行するSQLを変更
できます!
バッチファイルは修正しないため、バッチファイルの単体テスト等は不要。

よって
 ・「SQLを直接実行」よりも
 ・「SQLファイルを実行」の方が使い勝手が良い
と思います!
※バッチファイルの修正/単体テストが不要になるため。

PR

参考①

以下の詳細については、公式サイトをご確認ください。

●sqlcmdについて


●SQLファイル(スクリプトファイル)を使用したsqlcmdの実行について

PR

参考②

sqlcmdの実行結果を、変数へ格納することもできます。

詳細は以下の記事をご確認ください。

PR

参考③

sqlcmdの実行結果(SELECT文の結果)を、CSVファイルへ出力することもできます。

詳細は以下の記事をご確認ください。

PR

参考④

バッチファイルのノウハウサイトも運営しています。
合わせてご確認ください!

タイトルとURLをコピーしました