小物SEのメモ帳

IT関係の試したことや調べたことの備忘録

【SQL Server】【Bat】コマンドラインからのSQL呼び出しサンプル

SQLCMDを用いて、batファイルからSQLを呼び出し、結果ファイルに書き出すサンプルです。
スペースによる固定長ではなく、スペースを除いたカンマ区切りで出力したいことが多いかと思います。

システムの運用において定常業務の自動化などでちょっとしたbatから実行できるのでWindowsのタスクスケジューラで呼び出して実行したりとなにかと便利です。


構成は以下の通りです。

C:.
└─bat
  │   sqlcmd_sample.bat
  │
  ├─input
  │   sql_input.sql
  │
  └─output


実際に実行したいSQLは次のような簡単なSQLとします。

SET NOCOUNT ON
GO

SELECT * FROM dbo.EMPLOYEES;

次のようなbatで呼び出すことができます。

set user=sa
set password=system
set server=YUUSUKE-VAIO\INS_NISHI2016
set database=sales
set input=.\input\sql_input.sql
set output=.\output\sqlcmd_result.csv


@echo off
cd /d %~dp0%

sqlcmd -U %user% -P %password% -S %server% -d %database% -i %input% -o %output% -W -s ,

オプションの内容としては、よく使うのは以下くらいでしょうか。

オプション 説明
-U ユーザ名
-P パスワード
-S サーバ名
-d データベース名
-i インプットとなるSQLファイルのパスとファイル名
-o アウトプットとなるパスとファイル名
-s 区切り文字

出力結果は以下の通り。

EMPLOYEE_ID,FIRST_NAME,LAST_NAME,EMAIL,PHONE_NUMBER,HIRE_DATE,JOB_ID,SALARY,COMMISSION_PCT,MANAGER_ID,DEPARTMENT_ID
-----------,----------,---------,-----,------------,---------,------,------,--------------,----------,-------------
100,Steven,King,J,515.123.4567,1987-06-17,AD_PRES,24000,NULL,NULL,90
101,Neena,Kochhar,N,515.123.4568,1989-09-21,AD_VP,17000,NULL,100,90
102,Lex,De Haan,Z,515.123.4569,1993-01-13,AD_VP,17000,NULL,100,90
103,Alexander,Hunold,N,590.423.4567,1990-01-03,IT_PROG,9000,NULL,102,60
104,Bruce,Ernst,J,590.423.4568,1991-05-21,IT_PROG,6000,NULL,103,60
105,David,Austin,DAUSTIN,590.423.4569,1997-06-25,IT_PROG,4800,NULL,103,60
106,Valli,Pataballa,J,590.423.4560,1998-02-05,IT_PROG,4800,NULL,103,60
107,Diana,Lorentz,L,590.423.5567,1999-02-07,IT_PROG,4200,NULL,103,60
108,Nancy,Greenberg,NGREENBE,515.124.4569,1994-08-17,FI_MGR,12000,NULL,101,100
109,Daniel,Faviet,Q,515.124.4169,1994-08-16,FI_ACCOUNT,9000,NULL,108,100
110,John,Chen,Q,515.124.4269,1997-09-28,FI_ACCOUNT,8200,NULL,108,100
111,Ismael,Sciarra,N,515.124.4369,1997-09-30,FI_ACCOUNT,7700,NULL,108,100
112,Jose Manuel,Urman,O,515.124.4469,1998-03-07,FI_ACCOUNT,7800,NULL,108,100

「-s」のオプションをつけないと扱いにくいスペースが混じるのでCSVとして扱いたい場合はつけておくとよいでしょう。