首页 > 解决方案 > ExecuteSqlScriptwithTransaction:失败,多语句事务中不允许出现异常 ALTER DATABASE 语句

问题描述

当我尝试在查询(Sql Server)下运行时,我得到异常说

ExecuteSqlScriptwithTransaction:失败,多语句事务中不允许出现异常 ALTER DATABASE 语句。

DECLARE @sql nvarchar(500)

IF((SELECT (size * 8 /1024.0)*1000 FROM sys.database_files df WHERE df.name like 'Test') < 9000000)  
   BEGIN    
      SET @sql = 'ALTER DATABASE Test MODIFY FILE ( NAME = N''Test'', SIZE = 10000000KB );'
      EXEC (@sql)          
  END 

GO

尝试如下但同样的错误

DECLARE @sql nvarchar(500)

IF((SELECT (size * 8 /1024.0)*1000 FROM sys.database_files df WHERE df.name like 'Test') < 9000000)
BEGIN
ALTER DATABASE Test MODIFY FILE ( NAME = N'Test', SIZE = 10000000KB )
END

GO

标签: sqlsql-serversql-server-2008

解决方案


标题中命名的ExecuteSqlScriptwithTransaction方法表明代码在事务中执行脚本。ALTER DATABASE 文档特别指出:

ALTER DATABASE 语句必须在自动提交模式(默认事务管理模式)下运行,并且不允许在显式或隐式事务中运行。

所以解决方案是使用不同的方法执行脚本,一种没有显式事务的方法。


推荐阅读