この記事では、バッチファイルから引数を渡してストアドプロシージャを実行する方法についてご説明します。
ストアドプロシージャの例
今回はバッチファイルから下のストアドプロシージャ「testProc」を実行します。
テーブル「tbl_test」のデータを更新するUPDATE文を実行するストアドプロシージャです。
テーブル「tbl_test」には下のようにデータが存在しています。
バッチファイルを実行すると、「testProc」が実行されてテーブル「tbl_test」のデータが更新されます。
今回は一番上の「score」の値が100に更新されています。
コードの例
Windows 認証の場合
Windows 認証でバッチファイルからストアドプロシージャを実行するコード(例)は下のとおりです。
@echo off sqlcmd -S (LocalDB)\MSSQLLocalDB -d CS_01 -E -Q "EXEC testProc tbl_test, 100, 1"
①sqlcmd
sqlcmdは、コマンドラインからSQL Serverに接続し、SQLクエリを実行するためのコマンドです。
今回はストアドプロシージャを実行したいので、sqlcmdコマンドを使ってストアドプロシージャを実行します。
②-S
サーバを指定するのに必要なオプションが「-S」です。
「-S」の後ろにはサーバ名を指定します。
③(LocalDB)\MSSQLLocalDB
「(LocalDB)\MSSQLLocalDB」はサーバで、今回はローカルサーバ「(LocalDB)\MSSQLLocalDB」に接続するので、「(LocalDB)\MSSQLLocalDB」を指定しています。
④-d
データベースを指定するのに必要なオプションが「-d」です。
「-d」の後ろにはデータベース名を指定します。
⑤CS_01
「CS_01」はデータベース名で、今回はデータベース「CS_01」のストアドプロシージャを実行するので、「CS_01」を指定しています。
⑥-E
Windows認証でSQL Serverに接続する場合にこの「-E」のオプションを指定します。
今回はWindows認証でSQL Serverに接続します。
⑦-Q
SQLクエリを指定するのに必要なオプションが「-Q」です。
「-Q」の後ろにはSQLクエリを指定します。
⑧EXEC
ストアドプロシージャを実行するのに、EXECキーワードを使います。
EXECキーワードの後ろにストアドプロシージャ名を指定します。
⑨testProc
testProcは今回実行するストアドプロシージャ名です。
⑩tbl_test, 100, 1
「tbl_test, 100, 1」の値は、ストアドプロシージャに渡す引数の値です。
この引数は、カンマ区切りで3つの値が並んでいます。
カンマ区切りで値を3つ並べると、ストアドプロシージャ側に引数を3つ渡すことができます。(値を複数渡すことが可能)
今回用意したストアドプロシージャ「testProc」は3つの引数を必要とするので、カンマ区切りで値を3つ並べています。
ストアドプロシージャ「testProc」の「@tblNM」にはtbl_test、「@updVal」には100、「@whereVal」には1が渡されます。
SQL Server 認証の場合
SQL Server 認証でバッチファイルからストアドプロシージャを実行するコード(例)は下のとおりです。
@echo off sqlcmd -S (LocalDB)\MSSQLLocalDB -d CS_01 -U test_user -P pass_str -Q "EXEC testProc tbl_test, 100,1"
①sqlcmd
sqlcmdは、コマンドラインからSQL Serverに接続し、SQLクエリを実行するためのコマンドです。
今回はストアドプロシージャを実行したいので、sqlcmdコマンドを使ってストアドプロシージャを実行します。
②-S
サーバを指定するのに必要なオプションが「-S」です。
「-S」の後ろにはサーバ名を指定します。
③(LocalDB)\MSSQLLocalDB
「(LocalDB)\MSSQLLocalDB」はサーバで、今回はローカルサーバ「(LocalDB)\MSSQLLocalDB」に接続するので、「(LocalDB)\MSSQLLocalDB」を指定しています。
④-d
データベースを指定するのに必要なオプションが「-d」です。
「-d」の後ろにはデータベース名を指定します。
⑤CS_01
「CS_01」はデータベース名で、今回はデータベース「CS_01」のストアドプロシージャを実行するので、「CS_01」を指定しています。
⑥-U
ユーザ名を指定するのに必要なオプションが「-U」です。
⑦test_user
「test_user」は、SQL Server認証でSQL Serverに接続する際のユーザ名です。
今回は「test_user」というユーザ名でSQL Serverに接続します。
⑧-P
パスワードの文字列を指定するのに必要なオプションが「-P」です。
⑨pass_str
「pass_str」は、SQL Server認証でSQL Serverに接続する際のパスワード名です。
今回は「pass_str」というパスワードでSQL Serverに接続します。
⑩-Q
SQLクエリを指定するのに必要なオプションが「-Q」です。
「-Q」の後ろにはSQLクエリを指定します。
⑪EXEC
ストアドプロシージャを実行するのに、EXECキーワードを使います。
EXECキーワードの後ろにストアドプロシージャ名を指定します。
⑫testProc
testProcは今回実行するストアドプロシージャ名です。
⑬tbl_test, 100, 1
「tbl_test, 100, 1」の値は、ストアドプロシージャに渡す引数の値です。
この引数は、カンマ区切りで3つの値が並んでいます。
カンマ区切りで値を3つ並べると、ストアドプロシージャ側に引数を3つ渡すことができます。(値を複数渡すことが可能)
今回用意したストアドプロシージャ「testProc」は3つの引数を必要とするので、カンマ区切りで値を3つ並べています。
ストアドプロシージャ「testProc」の「@tblNM」にはtbl_test、「@updVal」には100、「@whereVal」には1が渡されます。
動作確認
Windows 認証の場合
バッチファイル実行前
今回はWindows 認証でログインしてストアドプロシージャを実行するバッチファイルを用意しました。
今回用意したバッチファイルが実行するストアドプロシージャは下のとおりです。
テーブル「tbl_test」のデータを更新するUPDATE文を実行するストアドプロシージャです。
テーブル「tbl_test」には下のようにデータが存在しています。
バッチファイル実行後
バッチファイルを実行するとコマンドプロンプトが起動し閉じます。
次に再度テーブル「tbl_test」を確認してみると、一番上の「score」の値が100に更新されています。
引数は「tbl_test」「100」「1」の3つで、実行されたUPDATE文は下のとおりです。
update dbo.tbl_test set score = 100 where infoNo = 1
以上のUPDATE文は、テーブル「tbl_test」に対して、infoNoの値が1のデータに対するscoreの値を100に更新します。
infoNoの値が1のデータに対するscoreの値が、94から100に更新されていることが確認できます。
SQL Server 認証の場合
バッチファイル実行前
今回はSQL Server 認証でログインしてストアドプロシージャを実行するバッチファイルを用意しました。
今回用意したバッチファイルが実行するストアドプロシージャは下のとおりです。
テーブル「tbl_test」のデータを更新するUPDATE文を実行するストアドプロシージャです。
テーブル「tbl_test」には下のようにデータが存在しています。
バッチファイル実行後
バッチファイルを実行するとコマンドプロンプトが起動し閉じます。
次に再度テーブル「tbl_test」を確認してみると、一番上の「score」の値が100に更新されています。
引数は「tbl_test」「100」「1」の3つで、実行されたUPDATE文は下のとおりです。
update dbo.tbl_test set score = 100 where infoNo = 1
以上のUPDATE文は、テーブル「tbl_test」に対して、infoNoの値が1のデータに対するscoreの値を100に更新します。
infoNoの値が1のデータに対するscoreの値が、94から100に更新されていることが確認できます。
最後に
この記事では、バッチファイルから引数を渡してストアドプロシージャを実行する方法についてご説明しました。
バッチファイルから、引数が必要なストアドプロシージャを実行する場合は、そのストアドプロシージャの後ろに値を指定すれば良いです。
詳しくは「コードの例」の説明を参考にしてみてくださいね。
プログラミングのスキルを習得するなら
プログラミングのスキルを習得したい、今のスキルをもっと高めたい、そう考えているなら「プログラミングスクール」がおすすめです。
プログラミングのスキルの基礎を身につけるなら「TechAcademy」で1週間の無料体験があるので、これで「プログラミングの基礎」を学ぶのにおすすめですよ。