SQL - 更新在表上运行的顺序是什么,是否可以保证?

时间:2012-03-20 21:57:55

标签: sql sql-server-2008 sql-update

我环顾四周似乎无法找到答案,但如果我公然忽视它,请随时指出我。

我有一个更新表的查询。更新取决于表的顺序。

SQL更新语句是否逐行直接通过表? Update语句是直接从表中查看每一行,还是从“缓存的选择”中查看。在开始时执行的表格。我在桌面上有数据级联,我不确定它是否能正常工作。

其次,要执行此更新,我使用Update - From语句,其中表连接到另一个,然后返回自身。在更新发生之前,order by语句是否会对数据进行排序,或者执行其他操作?

我正在使用SQL server 2008 r2。

更新:这与我问here的另一个问题有关。 此更新适用于以下数据:

Id1    Id2
-----------
100    50
120    70
70     50
34     20
50     40
40     10

总体而言,应该将信息从Id1更新为Id2,以便上述内容将进行更新,以便有效地更新以下数据,这是上述内容的缩减:

Id1    Id2
-----------
100    10
120    10
34     20

我看过它并假设,嘿,如果它在desc中从上到下工作,那么就不必担心这样做,因为更新将按顺序发生,任何人都可以通过。但显然这不正确。

1 个答案:

答案 0 :(得分:1)

如果您需要按特定顺序更新,请使用光标:

declare myCursor cursor
for select * from myTable1 t1
inner join myTable2 t2 on t1.id = t2.fid
order by t1.id  /* <==== */
for update of t1.col1, t1.col2

open myCursor
fetch next from myCursor /* optional into clause */
while @@fetch_status = 0
begin
    update myCursor set col1 = /* Some expression */, col2 = /* Some expression */
    fetch next from myCursor  /* optional into clause */
end
close myCursor 
deallocate myCursor