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

Détacher par programme la base de données SQL Server pour copier le fichier mdf

Pourquoi ne pas faire une sauvegarde ordinaire (facile à faire avec sqlcommand) et ajouter une fonctionnalité permettant aux utilisateurs de restaurer facilement ce fichier de sauvegarde en un clic sur un bouton ?

  • Vous pouvez sauvegarder la base de données avec les commandes sql
  • Vous pouvez décortiquer et compresser le fichier de sauvegarde avec les commandes sql
  • Vous pouvez également transférer et transférer automatiquement le fichier de sauvegarde vers un serveur Web si vous le souhaitez.

Qu'est-ce que les utilisateurs finaux utilisent pour consommer votre base de données ? Un programme winform ? Ensuite, il est facile de tout faire avec un clic de bouton pour l'utilisateur.

Voici quelques exemples de code pour cela :

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!

Vous devez avoir un movetoftp.bat qui contient ceci (changez ftp-server par votre):
ftp -s:ftpcommands.txt ftp.myftp.net

Et vous devez avoir un ftpcommands.txt qui contient ceci (vous pouvez avoir ce fichier créé dynamiquement avec juste le bon fichier zip par sqlcommands aussi, mais je vous laisse le faire vous-même) :

ftpusername
ftppassword
binaire
invite n
mput c:\backups\*.zip
quitter