5

ツリーの列を更新したい。私は次の声明を思いつきました:

WITH q AS (
    SELECT t1.*
    FROM buss_item t1
    WHERE t1.id_item = 218

    UNION ALL

    SELECT t2.*
    FROM buss_item t2
    JOIN q ON t2.parent_id = q.id_item
)
UPDATE q
SET default_item = 0

しかし、私はエラーが発生します:

派生テーブル 'q' は、派生テーブルの列が派生または定数であるため、更新できません。

このアップデートを修正する方法について何か考えはありますか?

4

3 に答える 3

9
WITH q AS (
    SELECT t1.*
    FROM buss_item t1
    WHERE t1.id_item = 218

    UNION ALL

    SELECT t2.*
    FROM buss_item t2
    JOIN q ON t2.parent_id = q.id_item
)
UPDATE buss_item  set default_item = 0 from q
where q.item_ID=buss_item.ItemID
于 2012-12-27T12:50:25.587 に答える
1

CTE を更新できます。これは、T-SQL の非常に便利な高度な機能です。実際、もちろんCTEを更新していませんが、その定義に含まれているテーブルと、すべてを1つのステップで実行しているため、これを発見したときは驚きました:) !! 従来の派生テーブルでも同じことができます。いくつかのネストを実行して、定義の最初のレベルに含まれる実際のテーブルを更新することもできます。ランキング関数の使用など、ネスト レベル間で追加のロジックを使用することもできます。

ここで報告されるエラーは、UNION ステートメントが原因であり、この種の操作を実行する場合は許可されません。それがなければ、更新は成功します。

于 2013-09-06T11:58:01.073 に答える