SQL Server脚本错误:数据库已在使用中

时间:2011-09-23 20:47:31

标签: sql-server

我有一个从visual studio运行的SQL Server部署脚本,它给了我错误:

  

错误SQL01268:.Net SqlClient数据提供程序:消息1828,级别16,状态5,行1逻辑文件名“myDB”已在使用中。选择其他名称。

但是,当我进入SSMS并尝试删除此数据库时,我收到错误:

  

无法删除数据库'myDB',因为它不存在或您没有权限。

任何人都可以帮我理解这个幻像文件名的存储位置,以便我可以将其删除吗?

感谢。

2 个答案:

答案 0 :(得分:3)

第二条错误消息指出无法删除数据库,因为其他会话当前已连接到该数据库。为了激活所有用户,您可以将其添加到部署脚本中,也可以在部署之前手动运行。 USE命令用于确保当您是连接者时没有竞争条件。

USE [master];
GO
ALTER DATABASE myDB SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO
DROP DATABASE myDB;
GO

答案 1 :(得分:0)

尝试从脚本生成数据库时也会发生此错误。我试图按照本文https://superuser.com/questions/468578/move-database-from-sql-server-2012-to-2008将SQL Server 2012数据库降级到2008。但是,当我最初运行脚本时,我收到了此错误

The logical file name "emmagarland" is already in use. Choose a different name.

在我的恢复脚本中看到(在阅读本文https://ask.sqlservercentral.com/questions/106577/the-logical-file-name-database-is-already-in-use.html之后),我没有检查并更改了逻辑文件名。我必须确保路径正确,并更改生成的日志文件名称,否则它会尝试用日志覆盖.mdf文件,然后抛出此错误。我通过将名称从xxxxx更改为xxxxxldf

来修复它
 CREATE DATABASE [xxxxx] ON  PRIMARY 
 ( NAME = xxxxx', FILENAME = N'C:\Program Files\Microsoft SQL
 Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\xxxxx.mdf' , SIZE =
 14400KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )
 LOG ON 
 ( NAME = N'xxxxxldf', FILENAME = N'C:\Program Files\Microsoft SQL
 Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\xxxxx_log.ldf' ,
 SIZE = 18560KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)
 GO

听起来很简单,但我无法理解为什么在创建全新数据库时出现此错误!