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
ます)、有効にした場合はSQL ServerManagementStudioで機能しますTools > Options > Query Execution > by default, open new queries in SQLCMD mode
。
SQLCMDユーティリティとそのすべてのパラメータの詳細については、MSDNを参照してください。
PS:もちろん、SQLCMDが有効なスクリプトを使用したこのアプローチは、バックアップ/復元サイクルでも機能します:-)(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
ここで推測しました-必要に応じて適応します)。