重命名数据库

适用于: SQL Server Azure SQL 数据库 Azure SQL 托管实例

本文说明如何使用 SQL Server Management Studio (SSMS) 或 Transact-SQL (T-SQL) 在 SQL Server、Azure SQL 数据库或 Azure SQL 托管实例中重命名用户定义的数据库。 数据库名称可以包含任何符合标识符规则的字符。

注意

若要重命名 Azure Synapse Analytics 或并行数据仓库中的数据库,请使用 RENAME 语句。

限制

  • 无法重命名系统数据库。

  • 在其他用户正在访问数据库时,无法更改数据库名称。

  • 重命名数据库时,不会更改磁盘上数据库文件的物理名称,也不会更改文件的逻辑名称。 有关详细信息,请参阅 数据库文件和文件组

  • 无法重命名在活动异地复制关系中配置的 Azure SQL 数据库。

权限

需要对数据库拥有 ALTER 权限。

使用 SQL Server Management Studio (SSMS)

使用以下步骤通过 SSMS 重命名 SQL Server 或 Azure SQL 数据库。

  1. 在 SSMS 中,选择“对象资源管理器”。 若要打开对象资源管理器,请按 F8。 或者,在顶部菜单上选择“视图”>“对象资源管理器”:

  2. 在“对象资源管理器”中,连接到某个 SQL Server 实例,然后展开该实例。

  3. 请确保该数据库没有打开的连接。 如果使用 SQL Server,则可以将数据库设置为单用户模式,关闭任何打开的连接并防止其他用户在你更改数据库名称时进行连接。

  4. 在对象资源管理器中,展开“数据库”,右键单击要重命名的数据库,然后选择“重命名”

  5. 输入新的数据库名称,然后选择“确定”

  6. 如果数据库是默认数据库,请参阅重命名后重置默认数据库

  7. 刷新对象资源管理器中的数据库列表。

使用 Transact-SQL

通过将 SQL Server 数据库置于单用户模式,对其重命名

使用下列步骤在 SSMS 中使用 T-SQL 重命名 SQL Server 数据库,包括将数据库置于单用户模式的步骤。 重命名后,此示例将数据库重新置于多用户模式。

  1. 为实例连接到 master 数据库。

  2. 打开一个查询窗口。

  3. 将以下示例复制并粘贴到查询窗口中,然后选择“执行”。 此示例将 MyTestDatabase 数据库的名称更改为 MyTestDatabaseCopy

    警告

    为了快速获取独占访问权限,代码示例使用终止选项 WITH ROLLBACK IMMEDIATE。 这将导致所有未完成的事务被回滚,并将立刻断开 MyTestDatabase 数据库的所有其他连接。

    USE master;
    GO
    ALTER DATABASE MyTestDatabase SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
    GO
    ALTER DATABASE MyTestDatabase MODIFY NAME = MyTestDatabaseCopy;
    GO
    ALTER DATABASE MyTestDatabaseCopy SET MULTI_USER;
    GO
    
  4. (可选)如果数据库是默认数据库,请参阅重命名后重置默认数据库

重命名 Azure SQL 数据库

使用以下步骤通过 SQL Server Management Studio 中的 T-SQL 重命名 Azure SQL 数据库。

  1. 为实例连接到 master 数据库。

  2. 打开一个查询窗口。

  3. 请确保当前无人使用该数据库。

  4. 将以下示例复制并粘贴到查询窗口中,然后选择“执行”。 此示例将 MyTestDatabase 数据库的名称更改为 MyTestDatabaseCopy

    ALTER DATABASE MyTestDatabase MODIFY NAME = MyTestDatabaseCopy;
    

在重命名数据库之后备份

重命名 SQL Server 中的数据库后,请备份 master 数据库。 在 Azure SQL 数据库中,不需要此过程,因为备份会自动进行。

重命名后重置默认数据库

如果要重命名的数据库被设置为 SQL Server 登录名的默认数据库,则可能会遇到错误 4064 Can't open user default database。 请使用以下命令将默认设置更改为已重命名的数据库:

USE [master]
GO
ALTER LOGIN [login] WITH DEFAULT_DATABASE=[new-database-name];
GO