CREATE DATABASE成功运行但未创建DB

时间:2017-10-24 15:20:14

标签: sql-server database tsql ssms

我从SSMS运行以下T-SQL语句

CREATE DATABASE SomeDB
GO

结果

  

命令已成功完成。

但实际上并没有创建数据库。我一直在研究并遇到this帖子,它具有相同的行为。该帖子的解决方案是在具有修改sys.databases权限的帐户下运行脚本。

但是,用户我在角色sysadmin下运行脚本并连接到DB,这足以创建数据库。

关于这里发生了什么的任何想法?

编辑1

如果我更改脚本(这是整个脚本,实际上名为SomeDB的数据库要测试),请转到以下

CREATE DATABASE SomeDB
GO
USE SomeDB

我在SSMS的消息面板中获得以下内容。

  

Msg 911,Level 16,State 1,Line 56

     

数据库' SomeDB'不存在。确保正确输入名称。

如果我将其更改为

CREATE DATABASE SomeDB
GO
SELECT * from sys.databases

我在“消息”面板中看到以下内容

  

命令已成功完成。

但是没有“结果”面板。这意味着对sys.databases的访问受到限制,但没有错误消息,这很奇怪。

编辑2

进一步考虑并尝试缩小问题的范围,我通过一个未加工的命令行运行以下内容;

sqlcmd -S .\SQLExpress2014 -Q "CREATE DATABASE SomeDB"

这次数据库确实存在。这会将问题缩小到SSMS本身而不是SQL Server或语法怪癖。

3 个答案:

答案 0 :(得分:1)

解决方案:以管理员身份运行SSMS。

尽管CREATE DATABASE通过未加工的命令行正常工作,但SSMS需要管理员权限才能执行相同操作。沉默的失败是......一个可能的错误?

我会对此做进一步的研究,但我的工作假设是,当通过命令行执行时,它使用SQL Server Windows服务实例的凭据(Network Service用于旧版本,NT Service\MSSQL$SQLEXPRESS用于以后写入%programfiles%文件夹的版本 - 这里存在强烈的权限问题。)如果通过Windows帐户连接,SSMS将使用当前登录的用户(未提升)。如果没有高程,则无%programfiles%的写入权限。

尽管如此,即使是这种情况(待验证),在此上下文中执行CREATE DATABASE时仍应存在访问错误。

答案 1 :(得分:0)

右键单击Object explorer中的数据库文件夹并刷新。然后检查数据库是否存在..

答案 2 :(得分:0)

1.-以管理员身份运行SSMS并创建数据库 2.-在命令显示成功创建数据库之后,尝试断开与对象资源管理器的连接并再次连接以查看它是否显示。