我有两个命令,需要两个都正确执行,或者一个都不执行.所以我想我需要一个交易,但我不知道如何正确使用它.

下面的脚本有什么问题?

BEGIN TRANSACTION [Tran1]

INSERT INTO [Test].[dbo].[T1]
    ([Title], [AVG])
VALUES ('Tidd130', 130), ('Tidd230', 230)

UPDATE [Test].[dbo].[T1]
  SET [Title] = N'az2' ,[AVG] = 1
  WHERE [dbo].[T1].[Title] = N'az'

COMMIT TRANSACTION [Tran1]
GO

执行INSERT命令,但UPDATE命令有问题.

如果两个命令中的任何一个在执行中出现错误,我如何实现这一点来回滚它们?

推荐答案

添加一个try/catch块,如果事务成功,它将提交更改,如果事务失败,事务将回滚:

BEGIN TRANSACTION [Tran1]

  BEGIN TRY

      INSERT INTO [Test].[dbo].[T1] ([Title], [AVG])
      VALUES ('Tidd130', 130), ('Tidd230', 230)

      UPDATE [Test].[dbo].[T1]
      SET [Title] = N'az2' ,[AVG] = 1
      WHERE [dbo].[T1].[Title] = N'az'

      COMMIT TRANSACTION [Tran1]

  END TRY

  BEGIN CATCH

      ROLLBACK TRANSACTION [Tran1]

  END CATCH  

Sql相关问答推荐

如何重用表值用户定义函数调用的结果?

如何转换和汇总行数

R中对Arrow duckdb工作流的SQL查询

如何使用ROW_NUM() Select 一个没有第二条记录的实例?

在请求结束之前,PostgreSQL不会考虑使用中的删除

如何根据特定的内部json元素值过滤postgres查询结果?

提高写密集型表的查询性能

如何根据计数和分组获取订单总数

如何在postgres函数中插入后返回布尔值?

SQL:如何查找聚合满足条件的连续日期

如何实现同一列的递归计算?

WooCommerce产品的SQL查询:获取sku和产品标签

用于SQL协助的XQUERY()

将 jsonb 数组中的对象取消嵌套到单独的行中

不同计数的 Postgres PIVOT 表

试图找到两个身份列表的交集(列表的长度不同),但获取列 id 不明确?

snowflake中的动态文件名生成

计算 BigQuery 中列的中值差 - 分析函数不能作为聚合函数的参数

IN子句使用的表值用户定义函数参数

面对来自以下两个代码的不同输出