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

时间:2018-08-27 21:22:27

标签: sql sql-server

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

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),所以我不确定在我之间,另一个用户是否能够更改“ important.Table”值。 SELECTUPDATE。有人可以给我一个提示吗?谢谢!

2 个答案:

答案 0 :(得分:4)

从本质上讲,它本质上是一个查询。在这些方面,它基本上与UPDATE ... FROM相同:

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

实际上,这是一个类似但不同的问题,它提出了这样一种CTE来代替两步选择/更新来实现原子性:

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

答案 1 :(得分:0)

不要将其视为两个查询。那是程序上的想法。 SQL Server是基于集合的,在这种情况下,您定义的是结束状态“此数据集将应用此转换”。

作为单个定义,它将始终是原子的。