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

Scollega a livello di codice il database di SQL Server per copiare il file mdf

Perché non eseguire un backup ordinario (facile da eseguire con sqlcommand) e aggiungere una funzionalità per consentire agli utenti di ripristinare facilmente il file di backup con un clic su un pulsante?

  • Puoi eseguire il backup del database con i comandi sql
  • Puoi sborsare e comprimere il file di backup con i comandi sql
  • Puoi anche sborsare e trasferire automaticamente il file di backup su un server web, se lo desideri.

Cosa usano gli utenti finali per consumare il tuo db? Un programma-winform? Quindi è facile fare tutto con un clic del pulsante per l'utente.

Ecco alcuni esempi di codice per questo:

Declare @CustomerID int
declare @FileName nvarchar(40)
declare @ZipFileName nvarchar(40)
declare @ZipComand nvarchar(255)


set @CustomerID=20 --Get from database instead in real life application
SET @FileName='c:\backups\myback'+ cast(@customerID as nvarchar(10))+'.bak'
SET @ZipFileName='c:\backups\myback'+ cast(@customerID as nvarchar(10))+'.zip'

--Backup database northwind
backup database northwind to [email protected]

--Zip the file, I got a commanddriven zip.exe from the net somewhere.
set @ZipComand= 'zip.exe -r '[email protected]+' '[email protected]
EXEC xp_cmdshell @zipcomand,NO_output

--Execute the batfile that ftp:s the file to the server
exec xp_cmdshell 'c:\movetoftp.bat',no_output

--Done!

Devi avere un movetoftp.bat che contenga questo (cambia ftp-server con il tuo):
ftp -s:ftpcommands.txt ftp.myftp.net

E devi avere un ftpcommands.txt che contenga questo (puoi avere questo file creato dinamicamente con il giusto file zip anche da sqlcommands, ma te lo lascio fare tu stesso):

ftpusername
ftppassword
binary
prompt n
mput c:\backups\*.zip
chiudi