Met behulp van de SQLCMD-modus kunt u dit eenvoudig scripten:
: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
Dit werkt ofwel vanuit sqlcmd.exe
vanaf de opdrachtregel (u kunt zelfs de waarden voor de variabelen dbname, dbfile, logfile
ook vanaf de opdrachtregel), of het werkt in SQL Server Management Studio als u Tools > Options > Query Execution > by default, open new queries in SQLCMD mode
.
Lees meer over het SQLCMD-hulpprogramma en al zijn parameters op MSDN.
PS:deze aanpak met een SQLCMD-script werkt natuurlijk ook voor BACKUP/RESTORE-cycli :-) (zoals aanbevolen door Aaron)
PPS:als je een goede naamgevingsconventie hebt, en het gegevensbestand is altijd $(dbname).mdf
en het logbestand is altijd $(dbname)_log.ldf
, kunt u ook dit verkorte SQLCMD-script gebruiken:
: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
en roep dit dan gewoon vanaf de opdrachtregel:
C:\> sqlcmd.exe -S yourserver -E -i attach.sql -v dbname=YourDb1
enzovoort, één keer voor elke database die u opnieuw moet koppelen.
PPPS:als je back-ups wilt terugzetten, is het iets ingewikkelder :
: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
Dit werkt, zolang je je .bak
een naam geeft bestanden hetzelfde als uw databasenaam, en u plaatst ze op een vaste locatie (ik nam aan dat E:\Backup
hier - pas zo nodig aan).