【SQL Server】バッチファイルからsqlcmdを実行し、結果を変数に格納する

バッチファイルから
 ・sqlcmd(SELECT文)を実行して
 ・結果を変数に格納
する方法を紹介します!

ここでは例として、1レコード
 ・1つのカラムの値を変数に格納
 ・複数のカラムの値を変数に格納
する方法を記載します!

PR

1つのカラムの値を変数に格納

ここでは例として、
 ・テーブル「employee」にある
 ・カラム「id」が「00001」のレコードの
 ・カラム「name」の値を取得して変数へ格納
します。

具体的にはバッチファイルから以下のSELECT文を実行し、結果を変数へ格納します。

SELECT name FROM employee WHERE id ='00001'
1レコードの1つのカラムの値
1レコードの1つのカラムの値
@echo off

REM #####################
REM ★接続情報
REM #####################
REM サーバー名(サーバーのPC名\インスタンス名)
set dbServer=localhost\SQLEXPRESS
REM データベース名
set dbName=sampleDB

REM WHERE句に指定する値 ※1レコードになるよう主キーを指定
set id=00001

REM 実行するsqlcmd(SELECT文)を組み立て ※1レコードの1つのカラム(name)を取得
set sqlcmd=sqlcmd -S %dbServer% -d %dbName% -E -Q "SET NOCOUNT ON; SELECT name FROM employee WHERE id = %id%"

REM SELECT文(sqlcmd)を実行し結果を変数「name」へ格納
for /f %%i in ('%sqlcmd%') do set name=%%i

REM 変数「name」の値を確認
echo 名前 : %name%
echo:

pause
exit

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

コマンド「sqlcmd」のオプション「-E」により、SQL Serverへの接続方法を「Windows接続」にしています。(15行目)

SELECT文の前に「SET NOCOUNT ON;」を実行することで、「SELECT文の処理件数」を非表示にしています。(15行目)


上記を実行すると
 ・1つのカラムの値を
 ・変数に格納
できたことを確認できます。

バッチファイルの実行結果(1つのカラムの値を数に格納)
PR

複数のカラムの値を変数に格納

ここでは例として、
 ・テーブル「employee」にある
 ・カラム「id」が「00001」のレコードの
 ・カラム「name」,「sex」,「section」の値を取得して変数へ格納
します。

具体的にはバッチファイルから以下のSELECT文を実行し、結果を変数へ格納します。

SELECT name,sex,section FROM employee WHERE id ='00001'
1レコードの複数のカラムの値
1レコードの複数のカラムの値
@echo off

REM #####################
REM ★接続情報
REM #####################
REM サーバー名(サーバーのPC名\インスタンス名)
set dbServer=localhost\SQLEXPRESS
REM データベース名
set dbName=sampleDB

REM WHERE句に指定する値 ※1レコードになるよう主キーを指定
set id=00001

REM 実行するsqlcmd(SELECT文)を組み立て ※複数のカラム(name、sex、section)を取得
set sqlcmd=sqlcmd -S %dbServer% -d %dbName% -E -Q "SET NOCOUNT ON; SELECT name, sex, section FROM employee WHERE id = %id%"

REM SELECT文(sqlcmd)を実行し結果を各変数へ格納
for /f "tokens=1,2,3" %%i in ('%sqlcmd%') do (
	set name=%%i
	set sex=%%j
	set section=%%k
)

REM 各変数の設定値を確認
echo 名前 : %name%
echo 性別 : %sex%
echo 課  : %section%
echo:

pause
exit

for文のオプション「tokens=1,2,3」により、「1~3つ目の値」を取得しています。(19行目)
※SELECT文で取得するカラムが3つのため。

コマンド「echo」による「各変数の設定値を確認」は、for文ので実施しています。
for文のだと確認できないためです。(26~28行目)
※詳細は「バッチファイル for文 遅延環境変数」等でググってください。


上記を実行すると
 ・複数のカラムの値を
 ・変数に格納
できたことを確認できます。

バッチファイルの実行結果(複数のカラムの値を数に格納)
バッチファイルの実行結果(複数のカラムの値を数に格納)
タイトルとURLをコピーしました