如何在不使用MS SQL Server Management Studio的情况下在SQL Server中更改默认数据库?


166

我从SQL Server删除了一个数据库,但是事实证明,我的登录名设置为使用删除的数据库作为默认数据库。我可以通过使用连接对话框中的“选项”按钮并选择“ master”作为要连接的数据库来连接到SQL Server Management Studio。但是,每当我尝试在对象资源管理器中执行任何操作时,它都会尝试使用默认数据库进行连接并失败。

有谁知道如何在不使用对象资源管理器的情况下设置默认数据库?

Answers:


38

替代sp_defaultdb(将在将来的Microsoft SQL Server版本中删除ALTER LOGIN

ALTER LOGIN [my_user_name] WITH DEFAULT_DATABASE = [new_default_database]

注意:与sp_defaultdb解决方案不同,提供的用户名和数据库名不带引号。如果名称具有特殊字符,则需要用括号括起来(最常见的例子是域用户,即domain \ username,没有括号就无法使用)。


1
那么这个问题现在变得有点老了。当时我正在使用SQL2005。直到2008版本才添加Alter Login。
马丁·布朗

@MartinBrown是的,我已经使用sp_deafultdb了很长时间了。我惊讶于有一种“新”方式。
Marek

注意:字段my_user_name或数据库周围不需要单引号,并且可能导致错误。对于经验丰富的人来说很明显,但对于偶尔这样做的人可能不是这样。如果字段表示连续文本,则方括号是可选的。
iokevins

我通过一个组连接到PROD数据库,所以我在服务器上没有单独的登录名,当我尝试运行以上命令时,我得到“无法更改登录名“ DOMAIN \ myuser”,因为它不存在或您没有权限。”。更糟糕的是,我属于多个组,因为每个组都为我提供了对服务器上众多数据库之一的特定访问权限。建议?
matao

1
要查找登录名的默认数据库是什么:从sys.server_principals中选择名称,default_database_name;
DocOc

215

您可以使用sp_defaultdb系统存储过程来设置默认数据库。完成后登录,然后单击“新建查询”按钮。之后,只需运行sp_defaultdb命令,如下所示:

Exec sp_defaultdb @loginame='login', @defdb='master' 

的确感谢。像魔术一样工作(并教会我有关“选项”对话框以指定数据库的信息)。
penderi 2010年

这个问题已经提出了一个问题
阿贝尔

1
如果您属于广告组,并且不想为其他数十个开发人员更改默认数据库,则效果会不太好。
DOK

@DOK:但是我认为,如果您的登录名以这种方式被破坏,那么其他所有开发人员也是如此。那么为所有人修复它肯定是一件好事吗?
马丁·布朗

好吧,在这个特定的SQL Server实例上有十二个不同的数据库。我们都想要一个不同的默认数据库。如果我们为每个数据库创建一个不同的用户组,以便它可以具有所需的默认数据库,那么如果我们想查看不同的数据库,则我们所有人都必须位于一组不同的用户组中,然后我们将失去所需的默认值。我希望Management Studio中有一种方法可以修复默认数据库,但是到目前为止,我还没有找到一种有效的方法。
DOK

49

要以GUI方式进行操作,您需要编辑登录名。它的属性之一是用于该登录的默认数据库。您可以在“安全性”节点下的“登录名”节点下找到登录名列表。然后选择您的登录名,然后右键单击并选择“属性”。更改默认数据库,您的生活会更好!

请注意,具有sysadmin privs的人员需要能够登录才能执行此操作或运行上一篇文章中的查询。


这很好!只需在其中输入“ master”数据库,而不是“ default”即可。
apprich 2011年

1
我遇到的问题是我是sysadmin,并且删除了我设置为默认值的数据库,因此无法进入此对话框。
马丁·布朗

@MartinBrown可能是这样,尽管我没有删除任何表,但仍然引发了您的问题,但是对GUI解决方案感到更自在。
2014年

41

由于这篇文章,我找到了一个更简单的答案:

  1. 打开Sql Server Management Studio

  2. 转到对象资源管理器->安全->登录

  3. 右键单击登录并选择属性

  4. 然后在属性窗口中更改默认数据库,然后单击“确定”。


1
欢迎使用StackOverflow,并感谢您提供答案。您可能想看看Markdown编辑器的功能,因此可以格式化代码块,列表等格式:stackoverflow.com/editing-help。我已经编辑了您的答案,以改善您的格式。
Paul Turner

这个问题的全部重点是,如果您删除了自己的登录帐户的默认数据库,那么您所描述的内容将不起作用。在我的特定情况下,我是系统中唯一的管理员,因此也无法使用他人的帐户来达到相同的效果。
马丁·布朗

@Mattijs希望您阅读问题的最后这一行:“有人知道如何在不使用对象资源管理器的情况下设置我的默认数据库吗?”。那就是您要执行的操作。
Rohit Vipin Mathews

2
这可能无法回答OP的问题,但可以回答我的问题。这是一个有用的答案。
CJ Dennis

1
在Azure数据库中这是不可能的:/
Squazz

14

如果您无权更改默认数据库,则可以在查询顶部手动选择其他数据库...

USE [SomeOtherDb]
SELECT 'I am now using a different DB'

只要您拥有另一个数据库的许可,它将起作用


8
  1. 单击更改连接图标
  2. 单击选项<<
  3. 从连接到数据库下拉列表中选择数据库

由于某些原因,这在某些情况下对我有效,而在另一些情况下则无效。
levininja

3

我也希望使用ALTER LOGINCommand作为可接受的答案,并在此处进行说明

但对于GUI爱好者

  1. 转到[服务器实例]->安全->登录-> [您的登录]
  2. 右键单击[您的登录]
  3. 更新页面底部的默认数据库选项

厌倦了阅读!!!只是看下面

在此处输入图片说明



0

这可能会也可能不会完全回答这个问题,但是当我更改帐户以拥有一个新数据库作为“默认数据库”时,我遇到了这个问题(和问题)。然后,我删除了该数据库,并想从头开始测试我的创建脚本。我注销了SSMS并打算重新登录,但是被拒绝了-无法登录默认数据库是错误。天哪!

我所做的是,在SSMS的登录对话框中,转到“选项”,“连接属性”,然后master在“连接到数据库”组合框中键入内容。单击连接。让我进入。从那里您可以运行命令来:

ALTER LOGIN [DOMAIN\useracct] WITH DEFAULT_DATABASE=[master]
GO

-1

如果您使用Windows身份验证,并且您不知道通过用户名和密码作为用户登录的密码,则可以执行以下操作:在SSMS的登录屏幕上,单击右下角的选项,然后转到连接属性选项卡。然后,您可以手动输入您可以访问的另一个数据库的名称,在该数据库的显示位置,它将使您可以连接。然后按照其他建议更改默认数据库

https://gyazo.com/c3d04c600311c08cb685bb668b569a67

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.