订单按系列更新

时间:2012-05-14 09:19:16

标签: sql sql-server sql-server-2008 sql-server-2005

我需要对UPDATE系列中的多个记录运行ORDER BY语句。这是因为我的更新包含一个标量函数,它使用早期更新的值。任何人都可以建议一个更好的方式除了循环以所需的顺序?


对不起,我应该早点完成,情景是......

我的问题是我有一个表变量,它有分层记录,

ID SlNo结果

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”。为此我需要更新“降序”中的行,并且还必须看到它的所有子分支都是“假”。我可以在一个更新声明中完成吗?如何在“我的更新查询”中说“排序”?

1 个答案:

答案 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