Usando la modalità SQLCMD, puoi facilmente scrivere questo:
: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
Funziona sia da sqlcmd.exe
dalla riga di comando (puoi anche fornire i valori per le variabili dbname, dbfile, logfile
anche dalla riga di comando), oppure funziona in SQL Server Management Studio se hai abilitato Tools > Options > Query Execution > by default, open new queries in SQLCMD mode
.
Ulteriori informazioni sull'utilità SQLCMD e tutti i suoi parametri su MSDN.
PS:ovviamente, questo approccio con uno script abilitato per SQLCMD funziona anche per i cicli BACKUP/RESTORE :-) (come consigliato da Aaron)
PPS:se hai una buona convenzione di denominazione e il file di dati è sempre $(dbname).mdf
e il file di registro è sempre $(dbname)_log.ldf
, potresti anche usare questo script SQLCMD abbreviato:
: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
e quindi chiamalo dalla riga di comando:
C:\> sqlcmd.exe -S yourserver -E -i attach.sql -v dbname=YourDb1
e così via, una volta per ogni database da ricollegare.
PPPS:se vuoi ripristinare i backup, è solo leggermente più complicato :
: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
Funziona, a patto di nominare il tuo .bak
file come il nome del tuo database e li metti in una posizione fissa (presumo E:\Backup
qui - adattare se necessario).