Ved at bruge SQLCMD-tilstanden kan du nemt scripte dette:
: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
Dette virker enten fra sqlcmd.exe
fra kommandolinjen (du kan endda angive værdierne for variablerne dbname, dbfile, logfile
også fra kommandolinjen), eller det virker i SQL Server Management Studio, hvis du som standard aktiverede Tools > Options > Query Execution > by default, open new queries in SQLCMD mode
.
Læs mere om SQLCMD-værktøjet og alle dets parametre på MSDN.
PS:selvfølgelig virker denne tilgang med et SQLCMD-aktiveret script også til BACKUP/RESTORE cyklusser :-) (som anbefalet af Aaron)
PPS:hvis du har en god navnekonvention, og datafilen altid er $(dbname).mdf
og logfilen er altid $(dbname)_log.ldf
, kan du også bruge dette forkortede SQLCMD-script:
: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
og så bare kald dette fra kommandolinjen:
C:\> sqlcmd.exe -S yourserver -E -i attach.sql -v dbname=YourDb1
og så videre, én gang for hver database skal du vedhæfte igen.
PPPS:hvis du vil gendanne sikkerhedskopier, er det bare lidt mere kompliceret :
: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
Dette virker, så længe du navngiver din .bak
filer det samme som dit databasenavn, og du placerer dem på en fast placering (jeg formodede E:\Backup
her - tilpas efter behov).