Очень поздно, чтобы ответить.
Но для кого-то, кто ищет, как я.
и хочет cascade
вот очень хорошее объяснение
http://devio.wordpress.com/2008/05/23/recursive-delete-in-sql-server/
Проблема Хотя вы можете определить внешний ключ с помощью CASCADE DELETE в SQL Server, рекурсивное каскадное удаление не поддерживается (т.е. каскадное удаление в той же таблице).
Если вы создаете триггер INSTEAD OF DELETE, этот триггер срабатывает только для первого оператора DELETE и не запускается для записей, рекурсивно удаленных из этого триггера.
Это поведение задокументировано в MSDN для SQL Server 2000 и SQLServer 2005.
Решение Предположим, у вас есть таблица, определенная так:
CREATE TABLE MyTable (
OID INT, -- primary key
OID_Parent INT, -- recursion
... other columns
)
, тогда триггер удаления выглядит следующим образом:
CREATE TRIGGER del_MyTable ON MyTable INSTEAD OF DELETE
AS
CREATE TABLE #Table(
OID INT
)
INSERT INTO #Table (OID)
SELECT OID
FROM deleted
DECLARE @c INT
SET @c = 0
WHILE @c <> (SELECT COUNT(OID) FROM #Table) BEGIN
SELECT @c = COUNT(OID) FROM #Table
INSERT INTO #Table (OID)
SELECT MyTable.OID
FROM MyTable
LEFT OUTER JOIN #Table ON MyTable.OID = #Table.OID
WHERE MyTable.OID_Parent IN (SELECT OID FROM #Table)
AND #Table.OID IS NULL
END
DELETE MyTable
FROM MyTable
INNER JOIN #Table ON MyTable.OID = #Table.OID
GO