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

时间:2015-08-19 16:49:48

标签: sql-server transactions sql-server-2008-r2

我有桌子:[dbo]。[产品] 数据:

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

我不知道这个结果是正确的还是不正确的!

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

这是正确的。

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会将交易提交到数据库。

UPDATE正在将Name表格的Product字段设置为“XXX”,仅在ID字段为01的字段上设置。已经提交,但由于它位于其中间,SELECT将显示该更改,直到事务回滚。

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