【问题标题】:Create database error: cannot create file创建数据库错误:无法创建文件
【发布时间】:2011-08-27 20:42:36
【问题描述】:

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

有些用户更换数据库服务器,分离数据库,......并想重新安装。

如果文件存在于默认位置,我会收到以下错误:

无法创建文件 'C:\Program 文件\Microsoft SQL 服务器...\DATA\mydatabase.mdf' 因为它已经存在了。

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

我正在寻找类似的东西:

CREATE DATABASE mydatabase WITH OVERWRITE

编辑:

删除数据库不是解决方案。数据库不存在,但文件还在。

【问题讨论】:

    标签: sql-server sql-server-2005 sql-server-2008 sql-server-2000


    【解决方案1】:

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

    IF EXISTS (SELECT * FROM sys.sysdatabases WHERE NAME = 'mydatabase')
    BEGIN 
       DROP DATABASE mydatabase
    END
    

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

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

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

    【讨论】:

    • 数据库不存在但文件还在!
    • 就是这样:如果安装程序在本地机器上运行,我可以在创建数据库之前删除文件。但是当用户安装到远程 sql server 时,我该怎么做呢?
    • 我会声称,在任何盒子上的 sql server 数据目录中存在一个 mdf 文件意味着该文件要么附加到正在运行的数据库,然后可能会被删除或留在那里分离的数据库,并且只能由 dba 删除。在后一种情况下,您可以选择使用非标准文件名创建数据库以避免该问题,但删除文件似乎是一项不应该自动化的任务。语法如:CREATE DATABASE tests ON (NAME = tests_mdb, FILENAME = 'C:\temp\tests.mdf')
    • 我明白你的意思。如果您想从 sql server 内部删除文件,那不是一种方法,那就是尝试重新附加文件,然后 DROP 数据库(如果存在)?
    • @faester 沿着那条路走,到处都是地雷;如果缺少执行附件所需的文件之一怎么办?如果它因为损坏而分离怎么办?发生冲突时,您可以使用不同的文件名吗?还是在继续之前发现错误并强制进行有指导的手动干预?但是要直接回答您的问题,如果权限允许,您可以使用 xp_cmdshell 从服务器文件系统中删除文件。
    【解决方案2】:

    我使用 SQL Management Studio

    对象探索>选择实例>右键单击数据库文件夹>恢复数据库

    在“源”部分选择“设备”,然后选择要删除的 .mdf 文件(选择扩展名为 .* All File)

    所以,你得到了带有旧 MDF 文件的新数据库。

    然后以正确的方式放下它,.mdf 就会消失。

    干杯。

    【讨论】:

      【解决方案3】:

      现在是 2018 年,Life 和 Windows 都发生了变化。

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

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

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

      Start, Stop, Pause, Resume, Restart SQL Server Services

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

      你已经完成了

      【讨论】:

      • 这对我有用。谢谢 - 我只需要停止服务器即可删除文件。
      【解决方案4】:

      发生这种情况是因为有人可能已经重命名了您的数据库.. 但在后面 .mdf 文件被命名为第一次创建数据库。 您可以通过以下命令查看数据库名称及其对应的.mdf 文件:

      SELECT * FROM sys.sysdatabases

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多