Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Attacher plusieurs bases de données à l'aide de T-SQL

En utilisant le mode SQLCMD, vous pouvez facilement scripter ceci :

: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

Cela fonctionne soit depuis sqlcmd.exe depuis la ligne de commande (vous pouvez même fournir les valeurs des variables dbname, dbfile, logfile à partir de la ligne de commande également), ou cela fonctionne dans SQL Server Management Studio si vous avez activé Tools > Options > Query Execution > by default, open new queries in SQLCMD mode .

En savoir plus sur utilitaire SQLCMD et tous ses paramètres sur MSDN.

PS :bien sûr, cette approche avec un script compatible SQLCMD fonctionne également pour les cycles de SAUVEGARDE/RESTAURATION :-) (comme recommandé par Aaron)

PPS :si vous avez une bonne convention de nommage et que le fichier de données est toujours $(dbname).mdf et le fichier journal est toujours $(dbname)_log.ldf , vous pouvez également utiliser ce script SQLCMD abrégé :

: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

puis appelez ceci depuis la ligne de commande :

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

et ainsi de suite, une fois pour chaque base de données que vous devez rattacher.

PPPS :si vous souhaitez restaurer des sauvegardes, c'est juste un peu plus compliqué :

: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

Cela fonctionne, tant que vous nommez votre .bak fichiers identiques au nom de votre base de données, et vous les placez dans un emplacement fixe (j'ai supposé E:\Backup ici - adaptez si nécessaire).