如何在一个Transaction SQL中使用UPDATE和SELECT



我有一个表:[dbo].[Product]数据:

ID          Name
01          Keyboard
02          Monitor
03          Mouse
04          RAM
05          HDD

然后我有一个交易:

BEGIN TRAN
      UPDATE Product SET Name = 'XXX' WHERE ID = 01
      SELECT Name as Name_in_Trans FROM Product WHERE ID = 01
COMMIT TRAN 
     SELECT Name as Name_out_Trans FROM Product WHERE ID = 01
结果:

Name_in_Trans
XXX
Name_out_Trans
XXX

第一个选择位于与更新相同的事务中,因此它将看到该事务中任何未提交的数据—在您的示例中是XXX值。第二次选择是在事务提交之后,此时任何查询都应该看到更新的数据。长话短说——两个查询都应该看到XXX,这是预期的行为。

正确。

BEGIN TRAN
      UPDATE Product SET Name = 'XXX' WHERE ID = 01
      SELECT Name as Name_in_Trans FROM Product WHERE ID = 01
COMMIT TRAN 
     SELECT Name as Name_out_Trans FROM Product WHERE ID = 01

BEGIN TRAN将启动您的事务,COMMIT TRAN将将事务提交到数据库。

UPDATEProduct表的Name字段设置为'XXX',仅在ID字段为01的字段上。事务还没有被提交,但是由于它在事务的中间,SELECT将显示该更改,直到事务被回滚。

提交事务后,该更改已提交到数据库,因此从Product表中选择Name字段仍然会显示'XXX',因为它现在在数据库中有效。

最新更新