如何在SQL中修改/重命名数据库名称?

如何在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中修改/重命名数据库名称

运行下面的脚本会引发异常,原因是“@dbname附近的语法不正确”


您必须以动态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