1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

SQL Serverで外部ファイルのSQL文を連続実行する方法

Last updated at Posted at 2019-11-24

TL;DR

  • SQL Server でテーブル定義変更用のクエリ等を順番に実行する方法

解説

  • sqlフォルダに、実行したい順にファイル名を付けたテキストファイルを配置(01等の数値を付ける)
  • 接続情報を記載して、BATを実行する
  • ローカルにコピーしないと動作しない、はず

コード

構成
runsqlfiles.bat
└sql
  └01_createtable.txt
  └02_insertdata.txt
  └...
runsqlfiles.bat
@echo off

set PATCH_HOME=%~dp0\
set SQL_DIR=sql\
set INFO_LOG1=sqlrunlog.log
set SQL_LOG1=sqldetaillog.log
set server=myserver\myinstance
set db=mydb
set user=myuser
set pass=mypassword

cd %PATCH_HOME%%SQL_DIR%
  
echo ━━━━━━━━━━━━━━━━━━━━
echo 接続先 %DB%@%SERVER%
echo %PATCH_HOME%%SQL_DIR%のテキストファイル(*.txt)のSQLを連続実行します。
echo ローカルにコピーしてから実行してください。
echo ━━━━━━━━━━━━━━━━━━━━

pause
  
REM exe
echo %date% %time% >> %PATCH_HOME%%INFO_LOG1%
for /f "usebackq" %%I in (`dir /b /a-d /s *.txt`) do (
  echo 実行しています "%%I"
  echo %%I >> %PATCH_HOME%%INFO_LOG1%
  
  echo ――――――――――――――――――――― >> %PATCH_HOME%%SQL_LOG1%
  echo %%I >> %PATCH_HOME%%SQL_LOG1%
  echo ――――――――――――――――――――― >> %PATCH_HOME%%SQL_LOG1%

  sqlcmd -l 240 -S %server% -d %db% -U %user% -P %pass% -i %%I >> %PATCH_HOME%%SQL_LOG1%
  
  echo %date% %time% %%I ★完了 >> %PATCH_HOME%%SQL_LOG1%
)
echo %date% %time% >> %PATCH_HOME%%INFO_LOG1%
  
echo 完了。ログファイルを確認し、エラーが出ていないかを確認してください。
pause
1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?