3流プログラマのメモ書き

元開発職→社内SE→派遣で営業支援→開発戻り浦島太郎状態の三流プログラマのIT技術メモ書き。 このメモが忘れっぽい自分とググってきた技術者の役に立ってくれれば幸いです。

(SQL Server)バッチでシステムドライブにあるmdfファイルをアッタチさせようとしたけれど。。。

(SQL Server)SQLサーバの無人インストールとインストール後の各種設定設定 Part3とかなり関連のあるネタです。

バッチファイルで SQL Server 2005 Express のインストールと mdf のアタッチさせるんですが、mdf ファイルはシステムドライブの固定のフォルダにおいてるとします。たとえば C:\test\testdb.mdf とします。

最初は下記のようにしてました。

・バッチファイル(Windows認証)

>sqlcmd -S localhost\REALSTYLE -i makeuser.sql

SQLファイル( makeuser.sql)

CREATE DATABASE RhythmPro ON

(FILENAME = N'%systemdrive%\test\testdb.mdf' ),

(FILENAME = N'%systemdrive%\test\testdb_log.ldf' )

FOR ATTACH;

SQL ファイルの中で %systemdrive% と入れたんですが、環境変数SQL スクリプトでは使えないようです。

ということで、下記のようにバッチファイルの中に SQL クエリを記述すると、環境変数が置換されちゃんと動きました。

>sqlcmd -S localhost\SQLEXPRESS -Q "CREATE DATABASE TestDatabase ON (FILENAME = N'%systemdrive%\test\testdb.mdf' ),(FILENAME = N'%systemdrive%\test\testdb_log.ldf' ) FOR ATTACH;"

あと、SQL Server の自動インストールバッチファイルと同じバッチファイル上でに sqlcmd コマンドを使おうとすると、ダメみたいです。

どうやら SQL Server インストール中に環境変数 Path に sqlcmd があるフォルダへのパスが登録されるっぽいですが、いったん終了して再度コマンドプロンプトを立ち上げないと、環境変数反映されないっぽいです。

ここら辺注意が要りますね。