Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 更改数据库名称错误_Sql Server_Database_Tsql_Alter - Fatal编程技术网

Sql server 更改数据库名称错误

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语句应该在自动提交模式下运行。进一步搜索使我将脚本更改

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

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]
。听起来像是其他脚本之一启动了一个未回滚或提交的事务。这是第一个运行的脚本。那么,您的程序在运行脚本之前是否启动了一个事务?实际上可以-我刚刚检查了运行脚本的代码,它看起来好像正在创建一个事务来运行它那将是你的问题:)