-- 将数据库从 'OldDBName' 改为 'NewDBName'
ALTER DATABASE OldDBName MODIFY NAME = NewDBName;
-- 旧方法,不推荐在较新版本使用
EXEC sp_renamedb 'OldDBName', 'NewDBName';
-- 创建示例数据库
CREATE DATABASE TestDB1;
CREATE DATABASE TestDB2;
-- 批量重命名
DECLARE @OldName NVARCHAR(128) = 'TestDB1';
DECLARE @NewName NVARCHAR(128) = 'ProductionDB1';
-- 检查数据库是否存在
IF EXISTS (SELECT 1 FROM sys.databases WHERE name = @OldName)
BEGIN
-- 确保没有用户正在使用数据库
ALTER DATABASE [TestDB1] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
-- 重命名数据库
ALTER DATABASE [TestDB1] MODIFY NAME = [ProductionDB1];
-- 恢复多用户访问
ALTER DATABASE [ProductionDB1] SET MULTI_USER;
PRINT '数据库重命名成功: ' + @OldName + ' -> ' + @NewName;
END
sysadmin 或 dbcreator 固定服务器角色的成员
数据库必须处于在线状态(ONLINE)
不能有用户正在使用该数据库
-- 1. 检查是否有连接
SELECT
db_name(database_id) AS DatabaseName,
COUNT(*) AS ActiveConnections
FROM sys.dm_exec_sessions
WHERE database_id = DB_ID('OldDBName')
GROUP BY database_id;
-- 2. 查找引用该数据库的对象
SELECT
referencing_schema_name,
referencing_entity_name,
referencing_class_desc
FROM sys.dm_sql_referencing_entities('OldDBName', 'DATABASE');
-- 3. 断开所有连接(如果需要)
ALTER DATABASE OldDBName SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
-- 1. 验证重命名是否成功
SELECT name FROM sys.databases WHERE name = 'NewDBName';
-- 2. 更新作业、链接服务器等配置
-- 检查作业步骤
USE msdb;
SELECT
job_id,
step_name,
command
FROM sysjobsteps
WHERE command LIKE '%OldDBName%';
-- 3. 更新应用程序连接字符串
-- 修改应用程序配置文件中的数据库连接字符串
-- 如果数据库正在被使用,强制断开连接
USE master;
GO
-- 设置单用户模式并立即回滚现有连接
ALTER DATABASE OldDBName SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO
-- 重命名数据库
ALTER DATABASE OldDBName MODIFY NAME = NewDBName;
GO
-- 恢复多用户模式
ALTER DATABASE NewDBName SET MULTI_USER;
GO
-- 完整的安全重命名流程
USE master;
GO
DECLARE @OldDBName NVARCHAR(128) = 'TestDB';
DECLARE @NewDBName NVARCHAR(128) = 'ProductionDB';
DECLARE @SQL NVARCHAR(MAX);
-- 1. 检查数据库是否存在
IF NOT EXISTS (SELECT 1 FROM sys.databases WHERE name = @OldDBName)
BEGIN
RAISERROR('数据库 %s 不存在', 16, 1, @OldDBName);
RETURN;
END
-- 2. 检查新名称是否已被使用
IF EXISTS (SELECT 1 FROM sys.databases WHERE name = @NewDBName)
BEGIN
RAISERROR('数据库名称 %s 已被使用', 16, 1, @NewDBName);
RETURN;
END
-- 3. 断开所有连接
SET @SQL = 'ALTER DATABASE [' + @OldDBName + '] SET SINGLE_USER WITH ROLLBACK IMMEDIATE';
EXEC sp_executesql @SQL;
-- 4. 重命名数据库
SET @SQL = 'ALTER DATABASE [' + @OldDBName + '] MODIFY NAME = [' + @NewDBName + ']';
EXEC sp_executesql @SQL;
-- 5. 恢复多用户模式
SET @SQL = 'ALTER DATABASE [' + @NewDBName + '] SET MULTI_USER';
EXEC sp_executesql @SQL;
PRINT '数据库重命名完成: ' + @OldDBName + ' -> ' + @NewDBName;
推荐使用第一种方法(ALTER DATABASE),因为它是最新、最标准的方法,并且在所有支持的 SQL Server 版本中都可用。