2015-10-15 1 views
1

J'essaye d'automatiser un processus de détacher et de déposer une base de données (via un objshell.run VBS) Si j'utilise manuellement SSMS pour détacher et laisser tomber je peux alors copie des fichiers de base de données à un autre endroit ... si je l'utilise:Drop DB mais ne pas supprimer * .mdf/* .ldf

sqlcmd -U sa -P MyPassword -S (local) -Q "ALTER DATABASE MyDB set single_user With rollback IMMEDIATE" 

puis

sqlcmd -U sa -P MyPassword -S (local) -Q "DROP DATABASE MyDB" 

Il se détache/gouttes et supprime ensuite les fichiers. Comment puis-je obtenir le détachement et laisser tomber sans supprimer?

Répondre

3

La documentation MSDN sur DROP DATABASE a ceci à dire au sujet de laisser tomber la base de données sans supprimer les fichiers (sous Remarques générales):

Dropping une base de données supprime la base de données à partir d'une instance de SQL Server et supprime le disque physique fichiers utilisés par la base de données. Si la base de données ou l'un de ses fichiers est hors connexion lorsqu'il est supprimé, les fichiers du disque ne sont pas supprimés. Ces fichiers peuvent être supprimés manuellement en utilisant l'Explorateur Windows. Pour supprimer une base de données du serveur actuel sans supprimer les fichiers du système de fichiers, utilisez sp_detach_db.

Donc, pour vous laisser tomber la base de données sans avoir les fichiers sont supprimés avec sqlcmd vous pouvez changer pour le faire:

sqlcmd -U sa -P MyPassword -S (local) -Q "EXEC sp_detach_db 'MyDB', 'true'" 

DISCLAIMER: Je n'ai honnêtement jamais utilisé sqlcmd avant, mais en supposant de la syntaxe de la façon dont il est utilisé, je crois que cela devrait vous aider avec votre problème.