Използвайки режима SQLCMD, можете лесно да скриптирате това:
: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
Това работи или от sqlcmd.exe
от командния ред (можете дори да предоставите стойностите за променливите dbname, dbfile, logfile
от командния ред също) или работи в SQL Server Management Studio, ако сте активирали Tools > Options > Query Execution > by default, open new queries in SQLCMD mode
.
Прочетете повече за помощната програма SQLCMD и всички нейни параметри в MSDN.
PS:разбира се, този подход с активиран SQLCMD скрипт също работи за цикли BACKUP/RESTORE :-) (както е препоръчано от Aaron)
PPS:ако имате добра конвенция за именуване и файлът с данни винаги е $(dbname).mdf
и лог файлът винаги е $(dbname)_log.ldf
, можете също да използвате този съкратен SQLCMD скрипт:
: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
и след това просто извикайте това от командния ред:
C:\> sqlcmd.exe -S yourserver -E -i attach.sql -v dbname=YourDb1
и така нататък, веднъж за всяка база данни, която трябва да прикачите отново.
PPPS:ако искате да възстановите резервни копия, това е малко по-сложно :
: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
Това работи, стига да наименувате своя .bak
файлове със същото име като името на вашата база данни и ги поставяте на фиксирано място (предположих, че E:\Backup
тук - адаптирайте според нуждите).