Usando el modo SQLCMD, puede escribir esto fácilmente:
: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
Esto funciona desde sqlcmd.exe
desde la línea de comando (incluso puede proporcionar los valores para las variables dbname, dbfile, logfile
desde la línea de comando, también), o funciona en SQL Server Management Studio si habilitaste Tools > Options > Query Execution > by default, open new queries in SQLCMD mode
.
Obtenga más información sobre la utilidad SQLCMD y todos sus parámetros en MSDN.
PD:por supuesto, este enfoque con un script habilitado para SQLCMD también funciona para los ciclos BACKUP/RESTORE :-) (según lo recomendado por Aaron)
PPS:si tiene una buena convención de nomenclatura y el archivo de datos siempre es $(dbname).mdf
y el archivo de registro siempre es $(dbname)_log.ldf
, también podría usar este script SQLCMD abreviado:
: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
y luego llame a esto desde la línea de comando:
C:\> sqlcmd.exe -S yourserver -E -i attach.sql -v dbname=YourDb1
y así sucesivamente, una vez por cada base de datos que necesite volver a adjuntar.
PPPS:si desea restaurar las copias de seguridad, es un poco más complicado:
: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
Esto funciona, siempre y cuando nombre su .bak
archivos con el mismo nombre que el de su base de datos, y los coloca en una ubicación fija (supongo que E:\Backup
aquí - adaptar según sea necesario).