sql >> Base de Datos >  >> RDS >> Sqlserver

Adjunte múltiples bases de datos usando T-SQL

Usando el modo SQLCMD, puede escribir esto fácilmente:

: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

Esto funciona desde sqlcmd.exe desde la línea de comando (incluso puede proporcionar los valores para las variables dbname, dbfile, logfile desde la línea de comando, también), o funciona en SQL Server Management Studio si habilitaste Tools > Options > Query Execution > by default, open new queries in SQLCMD mode .

Obtenga más información sobre la utilidad SQLCMD y todos sus parámetros en MSDN.

PD:por supuesto, este enfoque con un script habilitado para SQLCMD también funciona para los ciclos BACKUP/RESTORE :-) (según lo recomendado por Aaron)

PPS:si tiene una buena convención de nomenclatura y el archivo de datos siempre es $(dbname).mdf y el archivo de registro siempre es $(dbname)_log.ldf , también podría usar este script SQLCMD abreviado:

: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

y luego llame a esto desde la línea de comando:

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

y así sucesivamente, una vez por cada base de datos que necesite volver a adjuntar.

PPPS:si desea restaurar las copias de seguridad, es un poco más complicado:

: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

Esto funciona, siempre y cuando nombre su .bak archivos con el mismo nombre que el de su base de datos, y los coloca en una ubicación fija (supongo que E:\Backup aquí - adaptar según sea necesario).