私は SQL Server 2008 Express R2 を使用しており、階層構造を持っているため、自己参照するテーブルがあります。
ルート ノードを削除する必要がありますが、外部キーが原因でエラーが発生します。2 つのオプションを使用できることを読みました。再帰 CTE を使用するか、削除トリガーの代わりに使用します。
両者の違いは何ですか? どちらがより効率的ですか?
ありがとう。
私は SQL Server 2008 Express R2 を使用しており、階層構造を持っているため、自己参照するテーブルがあります。
ルート ノードを削除する必要がありますが、外部キーが原因でエラーが発生します。2 つのオプションを使用できることを読みました。再帰 CTE を使用するか、削除トリガーの代わりに使用します。
両者の違いは何ですか? どちらがより効率的ですか?
ありがとう。
再帰的な 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