如何通过Transact-SQL查询获取SQL Server服务器的默认数据库名称
问题说明
最初需求是在满足特定条件时执行DROP DATABASE MyDB语句,遇到如下报错:
Database 'MyDB' is still in use
找到的可行方案是执行如下语句:
USE master DROP DATABASE MyDB
该方案可正常运行,但无法确认当前服务器的默认数据库一定是master,想要了解如何查询对应服务器的默认数据库名称,以便编写如下格式的语句:
USE Default_DB DROP DATABASE MyDB
解决方法
查询当前登录账号的默认数据库
SQL Server环境下执行以下语句即可查询:
SELECT DEFAULT_DATABASE_NAME FROM sys.server_principals WHERE name = SUSER_SNAME()
返回的查询结果就是当前登录账号对应的默认数据库名称。
更稳妥的删库写法
实际上你完全不需要依赖默认数据库配置,直接强制切换到master库同时提前切断目标库的活跃连接即可,不会受默认库配置影响,适配所有场景:
-- 强制切换到master系统库,无需关心当前默认数据库是什么 USE master GO -- 强制切断MyDB的所有活跃连接,避免占用报错 ALTER DATABASE MyDB SET SINGLE_USER WITH ROLLBACK IMMEDIATE GO -- 执行删库操作 DROP DATABASE MyDB GO
内容的提问来源于stack exchange,提问作者Lelouch
相关产品推荐
相关产品推荐

