SQL事务回滚 写法

以下是SQL 回滚的语句:
方案一:
SET   XACT_ABORT   ON--如果产生错误自动回滚
GO
BEGIN   TRAN
INSERT   INTO   A   VALUES   (4)
INSERT   INTO   B   VALUES   (5)
COMMIT   TRAN
也 可以使用_ConnectionPtr 对象的方法: BeginTrans、CommitTrans、RollbackTrans,使用该系列函数判断 并回滚。一旦调用了 BeginTrans 方法, 在调用 CommitTrans 或 RollbackTrans 结束事务之前, 数据库将不再立 即提交所作的任何更改。
方案二
BEGIN TRANSACTION
INSERT INTO A   values  (4)   ----- 该表含有触发器,UPDATE其他表
IF @@error <> 0  --发生错误
   BEGIN
     ROLLBACK TRANSACTION
         
   END
ELSE
   BEGIN
     COMMIT TRANSACTION
       
   END




SET   XACT_ABORT
指定当   Transact-SQL   语句产生运行时错误时,Microsoft&reg;   SQL   Server&#8482;   是否自动回滚当前事务。

语法

SET   XACT_ABORT   {   ON   |   OFF   }

注释

当   SET   XACT_ABORT   为   ON   时,如果   Transact-SQL   语句产生运行时错误,整个事务将终止并回滚。为   OFF   时,只回滚产生错误的   Transact-SQL   语句,而事务将继续进行处理。编译错误(如语法错误)不受   SET   XACT_ABORT   的影响。

对于大多数   OLE   DB   提供程序(包括   SQL   Server),隐性或显式事务中的数据修改语句必须将   XACT_ABORT   设置为   ON。唯一不需要该选项的情况是提供程序支持嵌套事务时。有关更多信息,请参见分布式查询和分布式事务。  


SET   XACT_ABORT   的设置是在执行或运行时设置,而不是在分析时设置

batchUpdate sql 是指一次性执行多个 SQL 语句的操作,通常用于批量插入、更新、删除等操作。在 Java 中,可以使用 JDBC 的 Batch 操作来实现 batchUpdate sql。 以下是 batchUpdate sql 的示例代码: ``` String[] sqls = {"INSERT INTO user(name, age) VALUES ('Tom', 20)", "INSERT INTO user(name, age) VALUES ('Jerry', 22)", "UPDATE user SET age = 21 WHERE name = 'Tom'", "DELETE FROM user WHERE name = 'Jerry'"}; Connection conn = null; PreparedStatement ps = null; try { conn = DriverManager.getConnection(url, username, password); conn.setAutoCommit(false); // 手动提交事务 ps = conn.prepareStatement(""); // 创建一个空的 PreparedStatement 对象 for (String sql : sqls) { ps.addBatch(sql); // 将 SQL 语句添加到批处理中 } int[] results = ps.executeBatch(); // 执行批处理并返回结果数组 conn.commit(); // 提交事务 System.out.println("batchUpdate sql 执行成功!共影响 " + results.length + " 条数据。"); } catch (SQLException e) { conn.rollback(); // 回滚事务 e.printStackTrace(); } finally { // 关闭连接和 PreparedStatement 对象 } ``` 在上面的示例中,我们首先定义了一个包含多条 SQL 语句的数组 sqls,然后使用 JDBC 的 Connection 和 PreparedStatement 对象实现了批处理操作。在 for 循环中,我们将每条 SQL 语句添加到 PreparedStatement 对象的批处理中,最后通过 executeBatch() 方法一次性执行所有 SQL 语句,并返回结果数组。如果批处理执行成功,则会提交事务并输出结果信息;否则会回滚事务并输出异常信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值