【问题标题】:error: ALTER DATABASE statement not allowed within multi-statement transaction错误:多语句事务中不允许使用 ALTER DATABASE 语句
【发布时间】:2015-07-28 11:49:44
【问题描述】:

我正在尝试运行以下查询,但它给了我 以下错误信息:

多语句中不允许使用 ALTER DATABASE 语句 交易。

查询是:

 ALTER DATABASE TSQL2012
 SET READ_COMMITTED_SNAPSHOT ON;

如图所示:知道为什么吗?

【问题讨论】:

  • 这表明您已经在该连接上获得了一个打开的事务。
  • 您正在尝试执行多个语句,其中之一是 ALTER DATABASE 语句。正如错误消息所述,这是不允许的。究竟是什么造成了混乱?
  • 试试添加 go;在 alter 语句之后。
  • @AnthonyGrist - 它与 batch 中的语句数量无关,错误与 transactions 有关。
  • 我从 Microsoft 原始 tsql 书中复制了这个。怎么解决??

标签: sql tsql sql-server-2012


【解决方案1】:

多语句事务是由BEGIN TRANSACTION 语句显式创建的事务,或者是通过使用Implicit Transactions 模式创建的事务 - 即,语句已执行,并且在执行下一条语句,transaction count 仍然大于 0。

这意味着,在您尝试执行代码的连接上,事务计数已经大于零。

您应该执行ROLLBACK(如果您不知道事务中已经完成了什么,则最安全)或COMMIT(对于保留已执行的数据更改最安全),然后您可以执行ALTER DATABASE 语句.

【讨论】:

    【解决方案2】:

    在我的情况下,通过切换到主数据库解决了类似的问题,可能是因为您不能同时使用数据库并对其进行更改。

    【讨论】:

      【解决方案3】:

      我会让你的事情变得更容易。

      问题是那里有一个未提交的事务。 所以,sql server 只希望你先提交,然后运行这个查询。

      如果您不想要该交易,则只需关闭该查询窗口,它会询问您是否要保存它。 然后打开一个新的,然后运行你想要的查询。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-17
        • 2016-04-30
        • 1970-01-01
        • 2015-08-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多