拒绝访问 CREATE DATABASE LocalDB。

6

我安装了SSMS 18。从SQL Server Express 2017安装中选择它以安装新的LocalDB实例,因为它还没有包含在SSMS 18安装中。

安装完成后,当我尝试使用下面的SQL创建数据库时。

CREATE DATABASE Test

我收到以下错误信息:

Msg 5123, Level 16, State 1, Line 1
CREATE FILE encountered operating system error 5(Access is denied.) while attempting to open or create the physical file 'C:\Users\brechtTest.mdf'.
Msg 1802, Level 16, State 4, Line 1
CREATE DATABASE failed. Some file names listed could not be created. Check related errors.

我注意到一件事,但不确定是否相关,那就是文件路径根本没有意义。缺少一个反斜杠。

我打开服务器属性,尝试添加一个反斜杠来解决问题。 enter image description here

但然后这个错误出现了。 enter image description here

之后,我尝试使用万能密码,在Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL14E.LOCALDB\MSSQLServer上给所有人授权。这可以防止更改服务器选项中的目录时弹出错误。但它并没有解决原始问题。

enter image description here

奇怪的是,通过GUI创建数据库(如下图)没有问题。但我需要CREATE DATABASE工作,因为我在使用这个功能时遇到了使用EntityFrameworkCore迁移时的错误。

enter image description here

只要我允许自己在“C:\Users”上拥有所有权限,就可以使用CREATE DATABASE创建数据库,因为所用的文件路径是“C:\Users\brechtTest.mdf”。但那个文件路径没有任何意义。

我尝试过以下一些方法:

  • 重新安装LocalDB。
  • 以管理员身份运行SSMS。
  • 配置SQL server服务使用本地用户。
  • 编辑Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL14E.LOCALDB\MSSQLServer键以包含反斜杠。

如何使其正常工作,即如何调整默认路径以包含反斜杠,使“C:\Users\brechtTest.mdf”变成“C:\Users\brecht\Test.mdf”?


我也遇到了这个错误,但是在调用 EnsureDatabase.For.SqlDatabase 时使用了 dbup。 - Chris Missal
@ChrisMissal 请尝试我的被接受的答案。 - Vqf5mG96cSTT
2个回答

5

这个错误是由于SQL Express 14.0.100中文件创建路径的错误导致的。如果受到影响,请按照以下步骤执行:

  1. 关闭SSMS和任务管理器中的所有运行中的SQL Server实例,包括SQL Server Telemetry和SQL Server Client NT相关任务。
  2. 在Windows资源管理器中导航至%LocalAppData%\Microsoft\Microsoft SQL Server Local DB\Instances\。
  3. 删除安装的任何本地实例,例如MSSQLLocalDB。
  4. 打开您喜欢的CLI(如命令提示符)并使用这些sqllocaldb命令。如果它说无法执行命令,因为实例MSSQLLocalDB不存在,请继续进行下一步。

    sqllocaldb stop MSSQLLocalDB

    sqllocaldb delete MSSQLLocalDB

  5. 使用最新的累积更新更新本地安装的SQL Serverhttps://www.microsoft.com/en-us/download/confirmation.aspx?id=56128。您可以在Microsoft SQL Server的更新中心上查看更新概述: https://technet.microsoft.com/en-us/library/ff803383.aspx

  6. 成功更新后,使用sqllocaldb create命令。

    sqllocaldb create "MSSQLLocalDB"

  7. 你的CLI应该提示已经创建了一个带有版本14.0.300或更高版本的本地数据库:

LocalDB instance "MSSQLLocalDB" created with version 14.0.3223.3.

如果您成功更新了本地数据库实例,但之后仍出现此错误:SqlException: 'Cannot create file 'C:\Users\%USERNAME%\Database.mdf' because it already exists.,请在指定路径中删除文件并重试。


0

由于商店的政策,我无法看到这些图片,但我认为您可以用两种方法实现您的目标。

在 SSMS 中右键单击服务器名称并选择属性,然后转到“数据库设置”,有一个名为“数据库默认位置”的部分,修改以满足您的要求。

第二个选择是明确指定数据文件,例如:

CREATE DATABASE [test]
  ON  PRIMARY 
( NAME = N'test', FILENAME = N'c:\mypath\test.mdf' , SIZE = 8192KB , FILEGROWTH = 65536KB )
 LOG ON 
( NAME = N'test_log', FILENAME = N'c:\mypath\test_log.ldf' , SIZE = 8192KB , FILEGROWTH = 65536KB )

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接