【问题标题】:SQL Server transaction not committingSQL Server 事务未提交
【发布时间】:2018-04-27 07:49:38
【问题描述】:

我有一个 SQL Server 事务,它向表中添加一列,然后向该列添加一些值。它运行完美,但不会提交更改。

我检查了@@trancount,运行查询后它的值为1。

交易出了什么问题?

谢谢!

BEGIN TRANSACTION
    ALTER TABLE Table
        ADD ColumnName VARCHAR(200) NULL;
    GO

    BEGIN TRY
        UPDATE ColumnName 
        SET ColumnName = 'some value'

        COMMIT TRANSACTION
    END TRY
    BEGIN CATCH
        ROLLBACK TRANSACTION;
    END CATCH;

【问题讨论】:

  • 为什么在BEGIN中使用GO ... END
  • 您使用的是哪个 dbms?该代码是特定于产品的。
  • 用列名替换表名
  • 我用的是MS SQL,没有Go,新添加的列无法识别。
  • 我认为 begin transaction 应该在 GO 之后

标签: sql-server tsql transactions commit


【解决方案1】:

您需要更改您的update 以告诉它要更新哪个表。

 UPDATE Table SET ColumnName = 'some value'

【讨论】:

    【解决方案2】:

    如果你这样做,它会起作用。 XACT_ABORT 会在运行时发生错误时自动回滚事务。我过去在使用 TRY...CATCH 时遇到过问题,在这种情况下,似乎没有必要。

    SET XACT_ABORT ON
    BEGIN TRANSACTION
        ALTER TABLE Table
            ADD ColumnName VARCHAR(200) NULL;
    
        UPDATE Table 
            SET ColumnName = 'some value';
    
        COMMIT TRANSACTION;
    
    SET XACT_ABORT OFF
    

    更新

    如果您仍想使用 TRY...CATCH 构造,我发现了这个,它更好地解释了该过程。

    Try...Catch inside Transactions

    【讨论】:

      猜你喜欢
      • 2015-07-27
      • 1970-01-01
      • 2011-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-09
      • 1970-01-01
      • 2018-09-19
      相关资源
      最近更新 更多