0

私は SQL Server 2008 Express R2 を使用しており、階層構造を持っているため、自己参照するテーブルがあります。

ルート ノードを削除する必要がありますが、外部キーが原因でエラーが発生します。2 つのオプションを使用できることを読みました。再帰 CTE を使用するか、削除トリガーの代わりに使用します。

両者の違いは何ですか? どちらがより効率的ですか?

ありがとう。

4

1 に答える 1

1

再帰的な CTE とは対照的に削除トリガーを使用すると言うとき、トリガーで何らかのループを実行すると仮定します。これは、CTE がより効率的であることを意味します。

CTE については、次のようなものを試してください。

with cte as (
    select id as root, parent, id
    from [<YourTable>]
    where parent is null -- This selects root nodes

    union all

    select cte.root, d.parent, d.id
    from cte
    inner join data d on cte.id = d.parent
)
delete from [<YourTable>]
from [<YourTable>]
inner join cte on rel.id = cte.id
where cte.root = 1 -- This is the root to delete
于 2013-04-09T08:55:30.763 に答える