Korzystając z trybu SQLCMD, możesz łatwo wykonać ten skrypt:
: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
Działa to albo z sqlcmd.exe
z wiersza poleceń (możesz nawet podać wartości zmiennych dbname, dbfile, logfile
z wiersza poleceń) lub działa w SQL Server Management Studio, jeśli domyślnie włączono Tools > Options > Query Execution > by default, open new queries in SQLCMD mode
.
Przeczytaj więcej o narzędziu SQLCMD i wszystkich jego parametrach na MSDN.
PS:oczywiście to podejście z włączonym skryptem SQLCMD działa również dla cykli BACKUP/RESTORE :-) (zgodnie z zaleceniami Aarona)
PPS:jeśli masz dobrą konwencję nazewnictwa, a plik danych to zawsze $(dbname).mdf
a plik dziennika to zawsze $(dbname)_log.ldf
, możesz również użyć tego skróconego skryptu 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 potem po prostu wywołaj to z wiersza poleceń:
C:\> sqlcmd.exe -S yourserver -E -i attach.sql -v dbname=YourDb1
i tak dalej, raz dla każdej bazy danych, którą musisz ponownie dołączyć.
PPPS:jeśli chcesz przywrócić kopie zapasowe, jest to tylko trochę bardziej skomplikowane :
: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
To działa, o ile nazwiesz swój .bak
pliki takie same jak nazwa bazy danych i umieszczasz je w stałej lokalizacji (przypuszczam, że E:\Backup
tutaj - dostosuj w razie potrzeby).