我需要对UPDATE
系列中的多个记录运行ORDER BY
语句。这是因为我的更新包含一个标量函数,它使用早期更新的值。任何人都可以建议一个更好的方式除了循环以所需的顺序?
对不起,我应该早点完成,情景是......
我的问题是我有一个表变量,它有分层记录,
1 1.0 True
2 1.1正确
3 1.1.1正确
4 1.1.2错误
5 1.2正确
6 1.2.1错误
7 1.2.2错误
8 1.2.3错误
9 1.2.4错误
树结构是,
1.0
1.0 > 1.1
1.0 > 1.1 > 1.1.1
1.0> 1.1> 1.1.2
1.0> 1.2
1.0> 1.2> 2.2.1
1.0> 1.2> 2.2.2
1.0> 1.2> 2.2.3
1.0> 1.2> 2.2.4
我想将结果更新到表中,如果所有子分支都是“False”,那么其父分支应该为“False”。为此我需要更新“降序”中的行,并且还必须看到它的所有子分支都是“假”。我可以在一个更新声明中完成吗?如何在“我的更新查询”中说“排序”?
答案 0 :(得分:2)
使用select编写一个生成所需值的查询。此查询可能会使用row_number()函数来确保排序。
然后,使用此查询进行更新。
作为一个简单的例子,如果你想将一个列更新为一个表的序列号,其顺序是由col1指定的,那么你可以这样做:
select t.*, row_number() over (partition by NULL order by col1) as seqnum
from table t
现在把它放到更新中:
with newvals (select t.*,
row_number() over (partition by NULL order by col1) as seqnum
from table t
)
update table
set column = seqnum
from t
where t.id = table.id