Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Hängen Sie mehrere Datenbanken mit T-SQL an

Mit dem SQLCMD-Modus können Sie dies einfach skripten:

: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

Dies funktioniert entweder über sqlcmd.exe von der Befehlszeile aus (Sie können sogar die Werte für die Variablen dbname, dbfile, logfile angeben auch über die Befehlszeile), oder es funktioniert in SQL Server Management Studio, wenn Sie Tools > Options > Query Execution > by default, open new queries in SQLCMD mode aktiviert haben .

Lesen Sie mehr über das Dienstprogramm SQLCMD und alle seine Parameter auf MSDN.

PS:Natürlich funktioniert dieser Ansatz mit einem SQLCMD-fähigen Skript auch für BACKUP/RESTORE-Zyklen :-) (wie von Aaron empfohlen)

PPS:Wenn Sie eine gute Namenskonvention haben und die Datendatei immer $(dbname).mdf ist und die Protokolldatei ist immer $(dbname)_log.ldf , könnten Sie auch dieses verkürzte SQLCMD-Skript verwenden:

: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

und rufen Sie dann einfach dies von der Befehlszeile aus auf:

C:\>  sqlcmd.exe -S yourserver -E -i attach.sql -v dbname=YourDb1

und so weiter, einmal für jede Datenbank, die Sie neu anhängen müssen.

PPPS:Wenn Sie Backups wiederherstellen möchten, ist es nur etwas komplizierter :

: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

Das funktioniert, solange Sie Ihren .bak benennen Dateien den gleichen wie Ihr Datenbankname, und Sie legen sie an einem festen Ort ab (ich vermutete E:\Backup hier - bei Bedarf anpassen).