Med hjälp av SQLCMD-läget kan du enkelt skripta detta:
: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
Detta fungerar antingen från sqlcmd.exe
från kommandoraden (du kan till och med ange värden för variablerna dbname, dbfile, logfile
från kommandoraden också), eller så fungerar det i SQL Server Management Studio om du aktiverade Tools > Options > Query Execution > by default, open new queries in SQLCMD mode
.
Läs mer om SQLCMD-verktyget och alla dess parametrar på MSDN.
PS:det här tillvägagångssättet med ett SQLCMD-aktiverat skript fungerar naturligtvis även för BACKUP/RESTORE-cykler :-) (som rekommenderas av Aaron)
PPS:om du har en bra namnkonvention och datafilen alltid är $(dbname).mdf
och loggfilen är alltid $(dbname)_log.ldf
, kan du också använda detta förkortade SQLCMD-skript:
: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
och sedan bara anropa detta från kommandoraden:
C:\> sqlcmd.exe -S yourserver -E -i attach.sql -v dbname=YourDb1
och så vidare, en gång för varje databas du måste bifoga igen.
PPPS:om du vill återställa säkerhetskopior är det bara lite mer komplicerat :
: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
Detta fungerar så länge du namnger din .bak
filer samma som ditt databasnamn, och du placerar dem på en fast plats (jag antog E:\Backup
här - anpassa efter behov).