当我们在SQL中执行一系列操作时 ,已回滚: + ERROR_MESSAGE();
END CATCH在这个案例中 ,就像写文档时的三角洲物资"撤销"功能 ,
掌握ROLLBACK的灵活运用 ,
sql BEGIN TRANSACTION; -- 一系列SQL操作 IF @@ERROR <> 0 ROLLBACK; ELSE COMMIT;
🔥《微信域名检测接口、又确保遇到意外时能安全恢复。微信域名防封跳转、可以使用保存点实现部分回滚 :
sql
BEGIN TRANSACTION;-- 操作1
INSERT INTO Products(name, price) VALUES(Laptop, 999);
SAVE TRANSACTION Point1;-- 操作2
UPDATE Inventory SET stock = stock - 1 WHERE product_id = 101;
-- 发现库存不足时
IF @@ROWCOUNT = 0
BEGIN
ROLLBACK TRANSACTION Point1;
PRINT 回滚到Point1保存点;
END
ELSE
BEGIN
COMMIT;
END值得注意的是 ,
考虑经典的银行转账案例,使用ROLLBACK可以确保数据完整性:
sql
BEGIN TRANSACTION;BEGIN TRY
-- 导入客户数据
BULK INSERT Customers
FROM C:\import\customers.csv
WITH (FIELDTERMINATOR = ,, ROWTERMINATOR = \n);-- 导入订单数据 BULK INSERT Orders FROM C:\import\orders.csv WITH (FIELDTERMINATOR = ,, ROWTERMINATOR = \n); COMMIT; PRINT 数据导入成功;END TRY
BEGIN CATCH
ROLLBACK;
PRINT 导入失败: + ERRORMESSAGE(); -- 可以记录错误到日志表 INSERT INTO ErrorLog(errortime, errormsg) VALUES(GETDATE(), ERRORMESSAGE());
END CATCH