如何在SQL中修改/重命名数据库名称?
如何在SQL中修改/重命名数据库名称 运行下面的脚本会引发异常,原因是“@dbname附近的语法不正确”如何在SQL中修改/重命名数据库名称?,sql,sql-server,tsql,Sql,Sql Server,Tsql,如何在SQL中修改/重命名数据库名称 运行下面的脚本会引发异常,原因是“@dbname附近的语法不正确” 您必须以动态SQL的方式执行此操作 Declare @dbname nvarchar(50) set @dbname = 'MyDatabase_Test' EXEC('ALTER DATABASE MyDatabase MODIFY NAME = ' + @dbname); 很确定你需要一个用户来完成这个。。。并使用动态SQL…希望QUOTENAME。。。但这只是一个问题,我正在努力实
您必须以动态SQL的方式执行此操作
Declare @dbname nvarchar(50)
set @dbname = 'MyDatabase_Test'
EXEC('ALTER DATABASE MyDatabase MODIFY NAME = ' + @dbname);
很确定你需要一个用户来完成这个。。。并使用动态SQL…希望QUOTENAME。。。但这只是一个问题,我正在努力实现数据库恢复的自动化,并通过重命名它们的名称来保留当前数据库。我必须周期性地这样做,听起来这是一个非常糟糕的方法。这样管理数据库文件名将是一场噩梦。备份和恢复到不同的名称而不是重命名数据库会更简单(更安全)。但是,需要保留数据库的副本会产生非常糟糕的代码味道。我必须按照这种方法在测试环境中重命名现有数据库。。并使用从另一个环境中获取的新副本还原数据库。。但我得到的错误是Msg 5030,16级,状态2,第1行。数据库无法被独占锁定以执行该操作。@goofyui请参阅scsimon对您的问题的评论。我只需要语法..用于单用户
Declare @dbname nvarchar(50)
set @dbname = 'MyDatabase_Test'
EXEC('ALTER DATABASE MyDatabase MODIFY NAME = ' + @dbname);
DECLARE @SQLString nvarchar(500);
DECLARE @OldDbName nvarchar(100);
DECLARE @NewDbName nvarchar(100);
SET @OldDbName = 'MyTestDatabase';
SET @NewDbName = 'MyNewTestDatabase';
BEGIN TRY
SET @SQLString =
N'ALTER DATABASE ' + @OldDbName + ' SET SINGLE_USER WITH ROLLBACK
IMMEDIATE';
EXECUTE sp_executesql @SQLString
SET @SQLString =
N'ALTER DATABASE ' + @OldDbName + ' MODIFY NAME = ' + @NewDbName;
EXECUTE sp_executesql @SQLString
SET @SQLString =
N'ALTER DATABASE ' + @NewDbName + ' SET MULTI_USER' ;
EXECUTE sp_executesql @SQLString
END TRY
BEGIN CATCH
PRINT ERROR_MESSAGE();
END CATCH