sql >> Databáze >  >> RDS >> Sqlserver

Připojte více databází pomocí T-SQL

Pomocí režimu SQLCMD můžete toto snadno naskriptovat:

: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

Funguje to buď z sqlcmd.exe z příkazového řádku (můžete dokonce zadat hodnoty proměnných dbname, dbfile, logfile také z příkazového řádku), nebo funguje v SQL Server Management Studio, pokud jste povolili Tools > Options > Query Execution > by default, open new queries in SQLCMD mode .

Přečtěte si více o nástroj SQLCMD a všech jeho parametrech na MSDN.

PS:samozřejmě, tento přístup se skriptem povoleným SQLCMD funguje také pro cykly BACKUP/RESTORE :-) (jak doporučuje Aaron)

PPS:pokud máte dobrou konvenci pojmenování a datový soubor je vždy $(dbname).mdf a soubor protokolu je vždy $(dbname)_log.ldf , můžete také použít tento zkrácený skript SQLCMD:

: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

a pak stačí zavolat z příkazového řádku:

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

a tak dále, jednou pro každou databázi, kterou musíte znovu připojit.

PPPS:pokud chcete obnovit zálohy, je to trochu složitější:

: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

Toto funguje, pokud pojmenujete .bak soubory stejné jako název vaší databáze a umístíte je na pevné místo (předpokládal jsem, že E:\Backup zde – přizpůsobte se podle potřeby).



  1. Vzdálené připojení k databázi MySQL

  2. Výkon sys.partitions

  3. Vracejí agregované funkce MySQL vždy jeden řádek?

  4. Výhody MySQLi oproti MySQL