SQL Server: Self-reference FK, trigger-statt ON DELETE CASCADE

Muss ich führen eine ON DELETE CASCADE auf meine Tabelle mit dem Namen der KATEGORIE, die die folgenden columls
CAT_ID (BIGINT)
NAME (VARCHAR)
PARENT_CAT_ID (BIGINT)

PARENT_CAT_ID ist ein FK über CAT_ID. Natürlich, die schönen SQL-Server nicht gestatten Sie mir, mich AUF DELETE CASCADE fordern, kreisförmige oder mehrere Pfade zu löschen.

Einer Lösung, die sehe ich auch oft vorgeschlagen wird, ist löst. Dabei machte ich folgende trigger:

USE [ma]
GO
/****** Object:  Trigger [dbo].[TRG_DELETE_CHILD_CATEGORIES]    Script Date: 11/23/2009 16:47:59 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[TRG_DELETE_CHILD_CATEGORIES] ON [dbo].[CATEGORY] FOR DELETE AS
SET NOCOUNT ON
/* * CASCADE DELETES TO '[Tbl B]' */
DELETE CATEGORY FROM deleted, CATEGORY WHERE deleted.CAT_ID = CATEGORY.PARENT_CAT_ID

Wenn ich manuell löschen, eine Kategorie mit untergeordneten Kategorien, bekomme ich die folgende exception:

SQL Server: Self-reference FK, trigger-statt ON DELETE CASCADE

Irgendeine Idee, was falsch ist mit meinem trigger?

UPDATE:
Sorry für das edit, aber ich habe noch eine Spalte KATEGORIE.CAT_SCH_ID, das ist ein FK von einer anderen Tabelle CAT_SCH.ID. Dieser FK hat eine Löschweitergabe als auch, was bedeutet, dass, sobald ich löschen CAT_SCH, Ihre Kategorien müssen auch gelöscht werden. Also, ich bekomme diese Fehlermeldung, wenn ich definieren Sie den trigger:

Nicht erstellen INSTEAD OF DELETE oder INSTEAD OF UPDATE TRIGGER 'TRG_DEL_CATEGORY_WITH_CHILDREN' auf Tabelle 'KATEGORIE'. Dies ist, da die Tabelle einen FOREIGN KEY mit kaskadierenden DELETE-oder UPDATE.

Irgendwelche Ideen?

Schreibe einen Kommentar