创建数据库错误:无法创建文件

Wil*_*dVS 6 sql-server sql-server-2005 sql-server-2000 sql-server-2008

我有一个安装程序,作为安装的一部分创建一个SQL Server 2000(和更高版本)数据库.

一些用户更改数据库服务器,分离数据库,...并想要重新安装.

如果文件存在于默认位置,则会出现以下错误:

无法创建文件'C:\ Program Files\Microsoft SQL Server ...\DATA\mydatabase.mdf',因为它已经存在.

我可以通过先检查默认路径并删除文件来解决这个问题.但是,当用户安装到远程SQL Server时,我该怎么做?

我正在寻找类似的东西:

CREATE DATABASE mydatabase WITH OVERWRITE
Run Code Online (Sandbox Code Playgroud)

编辑:

删除数据库不是解决方案.数据库不存在但文件仍然存在.

Har*_*lse 6

现在已经是 2018 年了,生活和 Windows 都发生了变化。

所以我们需要一个新的程序来删除 MDF 文件

  • 该数据库不在 Microsoft SQL Server 中。
  • 尝试以编程方式删除它不会删除文件,因为数据库不存在
  • 无法在文件资源管理器中删除 MDF,因为“它正在被 SQL Server 使用”
  • 我尝试使用 Management Studio 恢复数据库,然后按照 TajMahals 的建议将其删除,可惜它不起作用。

删除文件的正确方法是停止 SQL Server,使用文件资源管理器删除文件,然后再次启动服务器。

启动、停止、暂停、恢复、重新启动 SQL Server 服务

  • 使用文件资源管理器转到文件夹 * C:\Windows\SysWOW64*
  • 找到文件SQLServerManager13.msc数字 13 可能会有所不同,具体取决于您的版本
  • 启动程序
  • 在左侧窗格中选择“Sql Server 服务”
  • 在右侧窗格中,您将看到 SQL Server,可能还有代理和浏览器
  • 按以下顺序停止它们:浏览器、代理、服务器。通过右键单击要停止的项目并选择停止来执行此操作
  • 使用文件资源管理器删除导致问题的 MDF 文件
  • 以相反的顺序启动服务

你就完成了


fae*_*ter 5

您可以像这样使用 sys.sysdatabase 测试数据库是否存在

IF EXISTS (SELECT * FROM sys.sysdatabases WHERE NAME = 'mydatabase')
BEGIN 
   DROP DATABASE mydatabase
END
Run Code Online (Sandbox Code Playgroud)

如果要测试特定文件是否已附加到 sql 服务器,您还可以使用系统视图 sys.sysdatabases,因为它包含包含所有数据库的 mdf 文件的“文件名”属性。

如果文件附加到不同的数据库,我认为覆盖它听起来很危险,您可能应该删除附加到文件的数据库。删除数据库将删除基础文件。

如果该文件存在但未连接到 sql 服务器,您可能应该将其删除一次,并确保 drop 在后续删除时删除文件。

  • 数据库不存在,但文件还在! (5认同)
  • 我会声称,在任何盒子上的 sql server 数据目录中存在一个 mdf 文件意味着该文件要么附加到正在运行的数据库,然后可能会被删除,要么由于分离的数据库而留在那里,应该删除仅由 dba 提供。在后一种情况下,您可以选择使用非标准文件名创建数据库以避免该问题,但删除文件似乎是一项不应自动化的任务。语法如:`CREATE DATABASE tests ON (NAME = tests_mdb, FILENAME = 'C:\temp\tests.mdf')` (2认同)