Sử dụng chế độ SQLCMD, bạn có thể dễ dàng tập lệnh này:
: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
Điều này hoạt động từ sqlcmd.exe
từ dòng lệnh (bạn thậm chí có thể cung cấp các giá trị cho các biến dbname, dbfile, logfile
từ dòng lệnh), hoặc nó hoạt động trong SQL Server Management Studio nếu bạn bật Tools > Options > Query Execution > by default, open new queries in SQLCMD mode
.
Đọc thêm về tiện ích SQLCMD và tất cả các tham số của nó trên MSDN.
Tái bút:tất nhiên, cách tiếp cận này với tập lệnh kích hoạt SQLCMD cũng hoạt động cho các chu kỳ SAO LƯU / KHÔI PHỤC :-) (theo khuyến nghị của Aaron)
PPS:nếu bạn có quy ước đặt tên tốt và tệp dữ liệu luôn là $(dbname).mdf
và tệp nhật ký luôn là $(dbname)_log.ldf
, bạn cũng có thể sử dụng tập lệnh SQLCMD rút gọn này:
: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
và sau đó chỉ cần gọi nó từ dòng lệnh:
C:\> sqlcmd.exe -S yourserver -E -i attach.sql -v dbname=YourDb1
v.v., một lần đối với mỗi cơ sở dữ liệu, bạn cần đính kèm lại.
PPPS:nếu bạn muốn khôi phục các bản sao lưu, nó chỉ phức tạp hơn một chút:
: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
Điều này hoạt động, miễn là bạn đặt tên cho .bak
của mình các tệp giống như tên cơ sở dữ liệu của bạn và bạn đặt chúng ở một vị trí cố định (tôi cho rằng E:\Backup
tại đây - điều chỉnh khi cần thiết).