0

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

USE [master]
GO

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

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

ALTER DATABASE statement not allowed within multi-statement transaction.

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

USE [master]
GO

SET IMPLICIT_TRANSACTIONS OFF

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

SET IMPLICIT_TRANSACTIONS ON

但是我仍然有同样的错误。有谁知道我需要做什么才能使这个脚本正常运行

我也试过这个没有EXEC

4

3 回答 3

1

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

于 2013-08-01T11:45:29.790 回答
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)
于 2013-08-01T11:19:45.597 回答
0

Then It should work :

First Set an Single User Mode : and Rename it.

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')
于 2013-08-01T11:33:00.337 回答