コマンドラインから SQL Server を制御
sqlcmd (SQL Server Command Line Tool)
sqlcmd は、 SQL Server 用のコマンドラインツールです。 SQL Server 2000 以前では osql が利用されていましたが、 SQL Server 2005 以降では sqlcmd の利用が推奨されています。*1
sqlcmd を利用して SQL を実行するには、以下のようにコマンドを入力します。
sqlcmd -E -S "[サーバ名]" -d "[データベース名]" -Q "[SQL Query]"
サーバ名とデータベース名を毎回入力するのは手間です。そこで、以下のようなコマンドを用意すると、毎回の入力が必要なくなるだけでなく、入力間違いもなくなるのでおすすめです。あらかじめ bat ファイルなどに準備し、「cmd.exe /k "sqlcmd.bat"」のように読み込んで使うと便利かもしれません。
set SQLCMD=sqlcmd -E -S "[サーバ名]" -d "[データベース名]" -Q
上記コマンドを用意している場合、以下のように入力するだけで簡単に SQL を実行できます。
%SQLCMD% "SELECT GETDATE()"
sp_attach_db (アタッチ) と sp_detach_db (デタッチ)
データベースファイル (mdf, ldf) のアタッチとデタッチには、それぞれ sp_attach_db と sp_detach_db を使います。基本的な構文は、以下のようになります。
sp_attach_db '[データベース名]','[MDF の PATH]','[LDF の PATH]' sp_detach_db '[データベース名]'
アタッチとデタッチを使うと、データベースのバックアップを簡易的に行うことが出来ます。例えば、以下のような .bat ファイルを用意しておくと、ファイルをダブルクリックするだけで DB のバックアップが完了します。
set SQLCMD=sqlcmd -E -S "[サーバ名]" -Q %SQLCMD% "sp_detach_db '[データベース名]'" copy "[MDF の PATH]" "[MDF のバックアップ先]" copy "[LDF の PATH]" "[LDF のバックアップ先]" %SQLCMD% "sp_attach_db '[データベース名]','[MDF の PATH]','[LDF の PATH]'"
RESTORE DATABASE (データベースのリストア)
データベースのリストア (復元) を行うには、 RESTORE DATABASE を使います。基本的な構文は以下のようになります。 各引数の意味は MSDN を参照してください。*2
RESTORE DATABASE [データベース名] FROM DISK = N'[バックアップファイルの PATH]' WITH REPLACE
bcp (バルクコピー)
bcp コマンドを使うと、データを一括してインポートしたりエクスポートしたり出来ます。特に、データベースの内容を CSV 形式でエクスポートする場合によく使われます。構文の詳細については MSDN を参照してください。
以下のような内容の .bat ファイルを用意すると、ダブルクリックするだけで毎回エクスポートできるので便利です。以下の例では、データベース内のテーブルごとに tsv (タブ区切り形式) でエクスポートしています。
rem 認証方法 (-U user -P password, -T [Windows 認証]) set AUTH_TYPE=-T bcp [データベース名].dbo.[テーブル名 1] out "[出力先 PATH 1]" -c %AUTH_TYPE% -S [サーバ名] bcp [データベース名].dbo.[テーブル名 2] out "[出力先 PATH 2]" -c %AUTH_TYPE% -S [サーバ名] bcp [データベース名].dbo.[テーブル名 3] out "[出力先 PATH 3]" -c %AUTH_TYPE% -S [サーバ名] ... bcp [データベース名].dbo.[テーブル名 n] out "[出力先 PATH n]" -c %AUTH_TYPE% -S [サーバ名]
*1:sqlcmd と osql の機能を比較すると、 sqlcmd では SQL Server 2005 の機能が全て利用できるのに対し、 osql では一部利用できない機能があるようです。
*2:ここでは WITH REPLACE を使っていますが、通常の運用では使わないほうが良い可能性が高いです。 WITH REPLACE が要件に合うかは SQL Server 2005 Books Online を参照してください。