我有以下脚本,我试图通过一个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
答案 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')