Sql server 更改数据库名称错误
我有以下脚本,我正试图通过一个winforms程序运行该脚本,该程序只执行目录中的所有脚本:Sql server 更改数据库名称错误,sql-server,database,tsql,alter,Sql Server,Database,Tsql,Alter,我有以下脚本,我正试图通过一个winforms程序运行该脚本,该程序只执行目录中的所有脚本: USE [master] GO EXEC('ALTER DATABASE [AT100Reporting] MODIFY Name = [IngeniumDynamics];') GO 但是,当我尝试运行此操作时,会出现以下错误: 在多语句事务中不允许使用ALTER DATABASE语句。 我在谷歌上搜索了一下,我能找到的主要信息是ALTERDB语句应该在自动提交模式下运行。进一步搜索使我将脚本更改
USE [master]
GO
EXEC('ALTER DATABASE [AT100Reporting] MODIFY Name = [IngeniumDynamics];')
GO
但是,当我尝试运行此操作时,会出现以下错误:
在多语句事务中不允许使用ALTER DATABASE语句。
我在谷歌上搜索了一下,我能找到的主要信息是ALTERDB语句应该在自动提交模式下运行。进一步搜索使我将脚本更改为
USE [master]
GO
SET IMPLICIT_TRANSACTIONS OFF
EXEC('ALTER DATABASE [AT100Reporting] MODIFY Name = [IngeniumDynamics];')
GO
SET IMPLICIT_TRANSACTIONS ON
但我仍然有同样的错误。有人知道我需要做什么才能让这个脚本正常运行吗
我也尝试过在没有您可以使用的EXEC
的情况下使用,
sp_重命名b OldDbName,NewDbName重命名数据库:
exec ('sp_renamedb questionoverflow, stackoverflow')
动态方式:
declare @OldName varchar(50)='questionoverflow'
declare @NewName varchar(50)='stackoverflow'
exec('sp_renamedb '+@OldName+','+@NewName)
那么它应该会起作用:
首先设置单用户模式:并重命名它
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')
正如约阿希姆·伊萨克森所指出的,问题不在于脚本,而在于运行脚本的winforms程序-我将TransactionScope选项设置为
TransactionScopeOption.Required
,但如果我将其更改为TransactionScopeOption.Suppress
查询工作正常我只是尝试了一下,不幸的是,现在我遇到了这个错误:错误程序'sys.sp_renamedb'无法在事务内执行。因此,您位于要重命名的同一数据库上,并且指定了一个事务?@N.pSubedi否,在重命名[AT100Reporting]时,问题中的脚本会将他放入[master]
。听起来像是其他脚本之一启动了一个未回滚或提交的事务。这是第一个运行的脚本。那么,您的程序在运行脚本之前是否启动了一个事务?实际上可以-我刚刚检查了运行脚本的代码,它看起来好像正在创建一个事务来运行它那将是你的问题:)