SQLCMD モードを使用すると、次のスクリプトを簡単に作成できます:
:setvar dbname YourDatabaseName :setvar dbfile N'E:\DATA\YourDatabase.mdf' :setvar logfile N'E:\TLOG\YourDatabase_log.ldf' USE [master] GO CREATE DATABASE $(dbname) ON ( FILENAME = $(dbfile) ), ( FILENAME = $(logfile) ) FOR ATTACH GO
プレ>これは
sqlcmd.exe
から動作します コマンドラインから (変数dbname, dbfile, logfile
の値を指定することもできます) コマンド ラインからも)、またはTools > Options > Query Execution > by default, open new queries in SQLCMD mode
を有効にすると、SQL Server Management Studio で動作します .SQLCMD ユーティリティとそのすべてのパラメーターについて詳しく読む MSDN で。
PS:もちろん、SQLCMD を有効にしたスクリプトを使用したこのアプローチは、BACKUP/RESTORE サイクルでも機能します :-) (Aaron が推奨)
PPS:適切な命名規則があり、データ ファイルが常に
$(dbname).mdf
である場合 ログファイルは常に$(dbname)_log.ldf
です 、この短縮された SQLCMD スクリプトを使用することもできます::setvar dbname YourDatabaseName USE [master] GO CREATE DATABASE $(dbname) ON ( FILENAME = N'E:\DATA\$(dbfile).mdf' ), ( FILENAME = N'E:\TLOG\$(logfile)_log.ldf' ) FOR ATTACH GO
プレ>次に、コマンドラインからこれを呼び出します:
C:\> sqlcmd.exe -S yourserver -E -i attach.sql -v dbname=YourDb1
プレ>など、データベースごとに 1 回、再接続する必要があります。
PPPS:バックアップを復元したい場合は、もう少し複雑です:
:setvar dbname YourDatabaseName USE [master] GO RESTORE DATABASE $(dbname) FROM DISK = N'E:\Backup\$(dbname).bak' WITH FILE = 1, MOVE N'$(dbname)' TO N'E:\DATA\$(dbname).mdf', MOVE N'$(dbname)_Log' TO N'E:\TLOG\$(dbname)_Log.ldf', NOUNLOAD, REPLACE GO
プレ>
.bak
という名前を付けている限り、これは機能します データベース名と同じファイルを作成し、それらを固定の場所に配置します (E:\Backup
と仮定しました)。 ここ - 必要に応じて調整してください)。