从这篇开始要总结事务了,我们就从一个简单的事务示例开始吧。下面这个示例首先定义了一个事务,然后把关于一个新订单的数据记录到数据库中。示例代码如下:
USE TSQLFundamentals2008; GO -- 事务 -- 一个简单的事务 BEGIN TRAN; -- 声明一个变量,保存新的OrderID DECLARE @neworderid AS INT=0; -- 将一个新订单插入到Sales.Orders表中 INSERT INTO Sales.Orders ( custid , empid , orderdate , requireddate , shippeddate , shipperid , freight , shipname , shipaddress , shipcity , shipregion , shippostalcode , shipcountry ) VALUES ( 85 , -- custid - int 5 , -- empid - int '20090212' , -- orderdate - datetime '20090301' , -- requireddate - datetime '20090216' , -- shippeddate - datetime 3 , -- shipperid - int 32.38 , -- freight - money N'ship to 85-b' , -- shipname - nvarchar(40) N'6789 rue de l' , -- shipaddress - nvarchar(60) N'Abbaye' , -- shipcity - nvarchar(15) N'Reims' , -- shipregion - nvarchar(15) N'10345' , -- shippostalcode - nvarchar(10) N'France' -- shipcountry - nvarchar(15) ); -- 将新的订单ID保存到变量中 SET @neworderid= SCOPE_IDENTITY(); --或者@@IDENTITY -- 返回新的订单ID SELECT @neworderid AS neworderid; -- 将新订单的订单明细插入到Sales.OrderDetails表中 INSERT INTO Sales.OrderDetails( orderid ,productid ,unitprice ,qty ,discount) VALUES ( @neworderid,11 ,14.00 ,12 ,0.000), (@neworderid,42,9.80,10,0.000), (@neworderid,72,34.80,5,0.000); -- 提交事务 COMMIT TRAN;
插入数据后的效果如下图:
我们可以看到,成功插入了一个订单和其三笔订单明细。
测试完成后,我们需要运行以下代码清理数据。
-- 清理数据 DELETE FROM Sales.OrderDetails WHERE orderid>11077; DELETE FROM Sales.Orders WHERE orderid>11077; DBCC CHECKIDENT('Sales.Orders',RESEED,11077); -- 重置标识值
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架