我正在尝试自动化分离和删除数据库的过程(通过VBS objshell.run),如果我手动使用SSMS分离和删除,则可以将数据库文件复制到另一个位置…但是,如果我使用:
sqlcmd -U sa -P MyPassword -S (local) -Q "ALTER DATABASE MyDB set single_user With rollback IMMEDIATE"
然后
sqlcmd -U sa -P MyPassword -S (local) -Q "DROP DATABASE MyDB"
它将分离/删除,然后删除文件。我如何在不删除的情况下进行分离和删除?
关于DROP DATABASE的MSDN文档具有这样的说法:删除数据库而不删除文件(在“常规备注”下):
删除数据库将从SQL Server实例中删除该数据库,并删除该数据库使用的物理磁盘文件。如果数据库或其任何文件在删除时处于脱机状态,则不会删除磁盘文件。可以使用Windows资源管理器手动删除这些文件。 若要从当前服务器中删除数据库而不从文件系统中删除文件,请使用 sp_detach_db。
因此,为了使您删除数据库而又不使用sqlcmd删除文件,可以对其进行更改以执行以下操作:
sqlcmd -U sa -P MyPassword -S (local) -Q "EXEC sp_detach_db 'MyDB', 'true'"
免责声明:老实说,我以前从未使用过sqlcmd,但从使用方式的语法上假设,我相信这应该可以帮助您解决问题。