更改数据库名称错误

时间:2013-08-01 11:13:24

标签: sql-server database tsql alter

我有以下脚本,我试图通过一个winforms程序运行,该程序只执行目录中的所有脚本:

USE [master]
GO

EXEC('ALTER DATABASE [AT100Reporting] MODIFY Name = [IngeniumDynamics];')
GO

但是,当我尝试运行此操作时,我收到以下错误:

ALTER DATABASE statement not allowed within multi-statement transaction.

我用Google搜索了这个,我能找到的主要内容是alter db语句应该在自动提交模式下运行。进一步搜索让我将脚本更改为

USE [master]
GO

SET IMPLICIT_TRANSACTIONS OFF

EXEC('ALTER DATABASE [AT100Reporting] MODIFY Name = [IngeniumDynamics];')
GO

SET IMPLICIT_TRANSACTIONS ON

然而我仍然有同样的错误。有谁知道我需要做些什么来使这个脚本正常运行

我也在没有EXEC

的情况下尝试过此操作

3 个答案:

答案 0 :(得分:1)

正如Joachim Isaksson所指出的那样,问题不在于脚本,而在于运行脚本的winforms程序 - 我将TransactionScope选项设置为TransactionScopeOption.Required但如果我将其更改为TransactionScopeOption.Suppress查询工作正常

答案 1 :(得分:0)

你可以用, sp_renamedb OldDbName,NewDbName 重命名数据库:

exec ('sp_renamedb questionoverflow, stackoverflow')

动态方式:

declare @OldName varchar(50)='questionoverflow'
declare @NewName varchar(50)='stackoverflow'

exec('sp_renamedb '+@OldName+','+@NewName)

答案 2 :(得分:0)

然后它应该工作:

首先设置单用户模式:并重命名。

declare @OldName varchar(50)='stackoverflow'
declare @NewName varchar(50)='a'

EXEC('ALTER DATABASE '+@OLDNAME + ' SET SINGLE_USER')

exec('sp_renamedb '+@OldName+','+@NewName)

//And again put it in Multi-User Mode ::
EXEC('ALTER DATABASE '+@NewName+ ' SET MULTI_USER')