SQL Server:CTE更新是否像事务一样工作?



我使用这样的查询来更新表的某些列:

WITH MyTable AS
(
SELECT TOP 1 
*, 
ROW_NUMBER() OVER (ORDER BY T.dtDate ASC) AS RowNum
FROM 
important.Table T
WHERE 
bWorking = 1
)
UPDATE MyTable
SET iIDfkToOtherTable = 6
WHERE RowNum = 1

此语句中有两个查询(SELECTUPDATE(,所以我不确定其他用户是否能够更改"重要。表"值,而我在SELECTUPDATE之间。有人可以给我一个线索吗?谢谢!

为了原子性,它本质上是一个查询。 它本质上与更新相同...从这些术语中:

https://stackoverflow.com/a/2334741/84206

实际上,这里有一个类似但不同的问题,建议使用这样的CTE来完成原子性,而不是两步选择/更新:

https://stackoverflow.com/a/42470136/84206

不要把它看作是两个查询。这就是程序思维。SQL Server 是基于设置的,在本例中,您将定义一个结束状态"这组数据将应用此转换"。

作为一个单一的定义,它将永远是原子的。

最新更新