首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >CREATE数据库运行成功,但没有创建DB。

CREATE数据库运行成功,但没有创建DB。
EN

Stack Overflow用户
提问于 2017-10-24 15:20:14
回答 3查看 1.9K关注 0票数 1

我正在从SSMS运行以下T语句

代码语言:javascript
运行
复制
CREATE DATABASE SomeDB
GO

有结果

命令已成功完成。

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

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

对这里发生了什么有什么想法吗?

编辑1

如果我将脚本(这是整个脚本,实际上名为SomeDB的DB进行测试)更改为以下内容

代码语言:javascript
运行
复制
CREATE DATABASE SomeDB
GO
USE SomeDB

我在SSMS的消息面板中得到以下信息。

Msg 911,第16级,状态1,第56线 数据库'SomeDB‘不存在。确保输入的名称正确。

如果我把这个改成

代码语言:javascript
运行
复制
CREATE DATABASE SomeDB
GO
SELECT * from sys.databases

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

命令已成功完成。

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

编辑2

更进一步,并试图缩小问题,我已经运行了以下通过一个非高架命令行;

代码语言:javascript
运行
复制
sqlcmd -S .\SQLExpress2014 -Q "CREATE DATABASE SomeDB"

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-10-24 16:31:54

解决方案:作为管理运行SSMS。

尽管CREATE DATABASE通过一个未提升的命令行很好地工作,但是SSMS需要管理员特权才能这样做。沉默的失败是.一个可能的窃听器?

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

尽管如此,即使是这种情况(需要验证),在这个上下文中执行CREATE DATABASE时仍然会出现访问错误。

票数 2
EN

Stack Overflow用户

发布于 2017-10-24 15:23:02

右键单击对象资源管理器中的“数据库”文件夹并刷新。然后检查是否存在DB。

票数 0
EN

Stack Overflow用户

发布于 2017-10-24 17:24:06

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46914275

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档