-1

シリーズUPDATE内の複数のレコードに対してステートメントを実行する必要があります。ORDER BYこれは、私の更新プログラムにスカラー関数が含まれているためです。これは、更新された初期値を使用します。希望の順序でループする以外に、より良い方法を提案できる人はいますか?


申し訳ありませんが、もっと早くやるべきでした。シナリオは..

私の問題は、テーブル変数があり、階層レコードがあることでした。

ID SlNo 結果

1 1.0 真

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」になるはずです。そのためには、「降順」で行を更新する必要があり、そのすべての子ブランチが「False」であることも確認する必要があります。単一の更新ステートメントで実行できますか? 更新クエリで Order by を指定するにはどうすればよいですか?

4

1 に答える 1

2

選択を使用して必要な値を生成するクエリを記述します。このクエリはおそらく、順序を確認するために 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
于 2012-05-14T13:26:17.617 に答える