Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Allega più database usando T-SQL

Usando la modalità SQLCMD, puoi facilmente scrivere questo:

: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

Funziona sia da sqlcmd.exe dalla riga di comando (puoi anche fornire i valori per le variabili dbname, dbfile, logfile anche dalla riga di comando), oppure funziona in SQL Server Management Studio se hai abilitato Tools > Options > Query Execution > by default, open new queries in SQLCMD mode .

Ulteriori informazioni sull'utilità SQLCMD e tutti i suoi parametri su MSDN.

PS:ovviamente, questo approccio con uno script abilitato per SQLCMD funziona anche per i cicli BACKUP/RESTORE :-) (come consigliato da Aaron)

PPS:se hai una buona convenzione di denominazione e il file di dati è sempre $(dbname).mdf e il file di registro è sempre $(dbname)_log.ldf , potresti anche usare questo script SQLCMD abbreviato:

: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

e quindi chiamalo dalla riga di comando:

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

e così via, una volta per ogni database da ricollegare.

PPPS:se vuoi ripristinare i backup, è solo leggermente più complicato :

: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

Funziona, a patto di nominare il tuo .bak file come il nome del tuo database e li metti in una posizione fissa (presumo E:\Backup qui - adattare se necessario).