Использование режима 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 utility and all its parameters на MSDN.
PS: Конечно, этот подход с поддержкой сценарием SQLCMD также работает для резервного копирования/восстановления цикла :-) (в соответствии с рекомендациями Аароном)
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
- при необходимости приспособитесь).
Настоятельно рекомендую вам рассмотреть другой подход, чем отсоединить/прикрепить. Вот почему: http://dba.stackexchange.com/questions/18593/should-i-migrate-data-using-detach-copy-attach-or-through-backup-restore-replay –