我正在尝试自动执行分离和删除数据库的过程(通过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"
分离/删除然后删除文件。如何在没有删除的情况下获取分离和删除?
答案 0 :(得分:5)
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,但是从它的使用方法的假设开始,我相信这可以帮助你解决问题。
答案 1 :(得分:1)
使用SET OFFLINE代替SET SINGLE_USER
ALTER DATABASE [DonaldTrump] SET OFFLINE WITH ROLLBACK IMMEDIATE; DROP DATABASE [DonaldTrump];
答案 2 :(得分:0)
也许最好是分离数据库而不是删除数据库? 如果删除数据库,则意味着删除
但是请注意,这将使您的硬盘上堆满您不再想要的数据库文件-几年后,您的继任者将用完空间,并想知道为什么磁盘上装满了他不需要的MDF文件t认识