Pomocí režimu SQLCMD můžete toto snadno naskriptovat:
: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
Funguje to buď z sqlcmd.exe
z příkazového řádku (můžete dokonce zadat hodnoty proměnných dbname, dbfile, logfile
také z příkazového řádku), nebo funguje v SQL Server Management Studio, pokud jste povolili Tools > Options > Query Execution > by default, open new queries in SQLCMD mode
.
Přečtěte si více o nástroj SQLCMD a všech jeho parametrech na MSDN.
PS:samozřejmě, tento přístup se skriptem povoleným SQLCMD funguje také pro cykly BACKUP/RESTORE :-) (jak doporučuje Aaron)
PPS:pokud máte dobrou konvenci pojmenování a datový soubor je vždy $(dbname).mdf
a soubor protokolu je vždy $(dbname)_log.ldf
, můžete také použít tento zkrácený skript 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
a pak stačí zavolat z příkazového řádku:
C:\> sqlcmd.exe -S yourserver -E -i attach.sql -v dbname=YourDb1
a tak dále, jednou pro každou databázi, kterou musíte znovu připojit.
PPPS:pokud chcete obnovit zálohy, je to trochu složitější:
: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
Toto funguje, pokud pojmenujete .bak
soubory stejné jako název vaší databáze a umístíte je na pevné místo (předpokládal jsem, že E:\Backup
zde – přizpůsobte se podle potřeby).