我使用这样的查询来更新表的某些列:
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
此语句中有两个查询(SELECT
和UPDATE
),所以我不确定在我之间,另一个用户是否能够更改“ important.Table”值。 SELECT
和UPDATE
。有人可以给我一个提示吗?谢谢!
答案 0 :(得分:4)
从本质上讲,它本质上是一个查询。在这些方面,它基本上与UPDATE ... FROM相同:
https://stackoverflow.com/a/2334741/84206
实际上,这是一个类似但不同的问题,它提出了这样一种CTE来代替两步选择/更新来实现原子性:
答案 1 :(得分:0)
不要将其视为两个查询。那是程序上的想法。 SQL Server是基于集合的,在这种情况下,您定义的是结束状态“此数据集将应用此转换”。
作为单个定义,它将始终是原子的。