*

【コマンドプロンプト】完成版!cmdでSQLの結果を変数に取得

以前、

【コマンドプロンプト】cmdでSQLの結果を変数に取得する方法

を書きましたが、コレの完成版です。

前回のでは、ERRORLEVELに取得するというちょっと強引な方法でしたが、今回はしっかりと変数にセットできます。まぁ件数とかだけなら前回の方法でも十分ですが。。

8行目 :サーバー名
10行目:データベース名
12行目:結果を取得したいSQL
35行目:FORの「tokens」をSQLで取得するカラム数にあわせる
39行目:CALLの引数を取得カラム数分指定する

46行目以降が取得した結果に対して、実行したい処理を記述(サンプルでは、echoで表示)

 

@echo off

REM #################################################
REM 変数セット
REM #################################################

REM サーバー名
SET SERVER=【サーバー名】
REM データベース名
SET DATABASE=【データベース名】
REM 実行SQL
SET SQL=SELECT TOP 3 [商品番号]^
                    ,[商品名]^
                    ,[区分番号]^
                    ,[価格],[原価]^
                    ,[商品写真]^
                    ,[販売開始日]^
                    ,[販売終了日]^
                    ,[更新日] ^
        FROM [db_Sales].[Product].[商品]

REM 行数カウント用
SET /A ROWCNT=0

REM sqlcmdコマンドの作成
SET SQLCMD=sqlcmd -S %SERVER% -E -d %DATABASE% -h -1 -s "," -Q "EXIT(set nocount on;%SQL%)"

REM #################################################
REM FOR文を使って、SQL結果1行ずつ取得
REM #################################################

REM SQLを実行し、カラムを取得する
REM ※SQLで取得するカラム数分の「tokens」を指定
FOR /F "usebackq delims=, tokens=1,2,3,4,5,6,7,8,9" %%i IN (`%SQLCMD%`) DO (

REM 1行ずつ処理する為、CALLで呼び出し(カラム数分を引数として渡す)
REM ※取得したカラムにスペースがあるときは、「"」で囲んで渡さないと引数が分割される
CALL :PROCESSING %%i %%j %%k %%l %%m %%n %%o %%p %%q
)

pause
exit

:PROCESSING
REM #################################################
REM 処理を記載
REM #################################################

REM 引数から取得
SET COL1=%1
SET COL2=%2
SET COL3=%3
SET COL4=%4
SET COL5=%5
SET COL6=%6
SET COL7=%7
SET COL8=%8
SET COL9=%9

REM 行数カウント
SET /A ROWCNT=%ROWCNT%+1

REM 1行づつ画面に出力
echo ========================
echo %ROWCNT%行目
echo ========================
echo カラム1:%COL1%
echo カラム2:%COL2%
echo カラム3:%COL3%
echo カラム4:%COL4%
echo カラム5:%COL5%
echo カラム6:%COL6%
echo カラム7:%COL7%
echo カラム8:%COL8%
echo カラム9:%COL9%
echo.

実行した結果が↓

SQLの結果を変数に取得。実行結果

 

Adsense

関連記事

コマンドプロンプト

【コマンドプロンプト】改行コード CR、LF、CRLFの出力とテキスト書き出し。

仕事でバッチファイルを使っているとログ出力が非常に大事になる。 細かくログを出すことによって、

記事を読む

データベース

【SQL Server】Excel VBAでSQLを実行し、レコードを更新(追加、更新、削除)する

VBAでSQL Serverのテーブルに SQL(Insert、Update、Delete)を発行

記事を読む

コマンドプロンプト

【コマンドプロンプト】バッチファイルでCSVを1行ずつ処理をする方法

僕はプログラマーではないので、あまりカッコイイプログラムはかけませんが、CSVファイルを1行ずつ、バ

記事を読む

データベース

【SQL Server 2012】テーブル、カラム、主キー、NULL制約、データ型、長さ、INDEXの有無の一括表示

職場のシステムリプレースに伴い、データベースのテーブル(カラム)の一覧が必要になりました。 普

記事を読む

データベース

【SQL Server 2012】Management Studioを使ったバックアップで面白い機能。

Management Studioを使ったバックアップをかれこれ3年くらいやってるんですが、一つのバ

記事を読む

データベース

【SQL Server 2012 Express】Windows Server 2012にインストールしてみる

Windows Server 2012にSQL Server 2012をインストールしてみる。 以

記事を読む

データベース

【レプリケーション】SQL Server 2012 Expressでレプリケーション

Windows Server 2012のSQL Server 2012 Expressを二台用意して

記事を読む

データベース

【SQL Server 2012】バッチ(コマンドプロンプト)でバックアップ

バッチ(コマンドプロンプト)を使って、SQL Server 2012のバックアップを取得します。

記事を読む

データベース

【SQL Server】varchar型、nvarchar型の文字数とバイト(byte)数を取得する

varchar型の文字数、バイト(byte)数を取得する方法 SELECT LEN(【文字

記事を読む

コマンドプロンプト

【コマンドプロンプト】前後の不要なスペースの除去(取り除く)

コマンドプロンプトのFOR文とか使って変数に取得しようとすると、取得元のコマンドとかファイルによって

記事を読む

Adsense

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

Adsense

Microsoft Office
【Access】削除クエリの「指定されたテーブルから削除できませんでした。」の対処法

削除クエリで「指定されたテーブルから削除できませんでした。」と ポッ

Microsoft Office
【PowerPoint】表や図形、画像オブジェクトの位置をピッタリ合わせる方法

パワーポイントで、図形や画像等のオブジェクトの細かい位置調整は、 完

データベース
【SQL Server】Excel VBAのレコードセットを使ってテーブルの一括更新

前々回は読み取り専用でレコードセットへ取得し、結果をエクセルへ書き出し

application
【Visual Studio】デバック、ブレークポイントで止まらない。

Visual Studio 2015でVB.netのプログラムをデバッ

データベース
【SQL Server】Excel VBAでSELECT文を実行してレコードセットへ取得

前回は、テーブルのレコードをVBAで直接更新(Insert/updat

→もっと見る

PAGE TOP ↑