【SQL Server】【Bat】コマンドラインからのSQL呼び出しサンプル
SQLCMDを用いて、batファイルからSQLを呼び出し、結果ファイルに書き出すサンプルです。
スペースによる固定長ではなく、スペースを除いたカンマ区切りで出力したいことが多いかと思います。
システムの運用において定常業務の自動化などでちょっとしたbatから実行できるのでWindowsのタスクスケジューラで呼び出して実行したりとなにかと便利です。
構成は以下の通りです。
C:.
└─bat
│ sqlcmd_sample.bat
│
├─input
│ sql_input.sql
│
└─output
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として扱いたい場合はつけておくとよいでしょう。