以前から何度かタスク処理にてデータを出しているが、新しい要望がある度に、やり方を再確認しているので、その備忘録

ストアドプロシージャを作成

SQL Server Managementで必要なデータを取り出すためのストアドを作成する。

今回は、毎月1日に過去2ヶ月分の契約一覧のデータを出す必要があるのだが、SQL自体は大して難しいモノではない。

気を付けるべき点は、日付けでの絞り込みの部分。

日付データを比較させるにあたっての問題は、月日のつもりが時間まで比較対象になっている点。

DBに保存されている日付データが文字列ならDATETIME型に変換して比較することになる。文字列の日付けをDATETIME方に変換すると時間は00:00:00になる。DATETIME型で保存されている場合は、時間部分を切り捨てて、00:00:00にする必要があるので、一旦文字列に変換して、再度DATETIME型に戻してやる。

時間部分が整ったところで、例えば11月1日~11月30日までのデータが欲しければ、「保存月日」>=11月1日 なおかつ「保存月日」< 12月1日という条件を付けてやればよい

SQL文の作成

ストアドが作成できたら、Windows側のタスクスケジューラーで走らせて、結果をcsvで保存させる。

タスクスケジューラーへの登録はbatファイルだが、そのbatファイルで指定するsqlを書いたsqlファイルを作成する。

use [DB名]

go

DECLARE @startDate char(10),@endDate char(10)

---日付を取得

SET @startDate = CONVERT(CHAR(10),DATEADD(MONTH, -1, GETDATE()),111)

SET @endDate = CONVERT(CHAR(10),GETDATE(),111)

---日にちを1日にセット

SET @startDate = STUFF(@startDate, 9,2,'1')

SET @endDate = STUFF(@endDate, 9,2,'1')

EXEC [ストアド名] @myDate @endDate

日付のパラメータは、ここで作らなくてもストアド内で作ってもよい。

batファイルを作る

OSのタスクスケジューラーで動かすためにbatファイルを作る。

SET YYYYMMDD=%DATE:/=%

SET DD=%YYYYMMDD:~-2%

IF "%DD%"=="01" GOTO SQL

IF "%DD%"=="05" GOTO SQL

IF "%DD%"=="15" GOTO SQL

GOTO END

:SQL

sqlcmd -S [サーバー名\インスタンス名] -U [ログインID] -P [パスワード] -i [sqlファイルのパス] -W -s "," -o [保存先のパス]\%YYYYMMDD%.csv

:END

上記の例では、毎月1日、5日、15日にSQLを走らせて、結果を保存させている。

あとは、タスクスケジューラーに登録するだけ。

おすすめの記事