Però in tutte le documentazioni è scritto:
I trigger INSTEAD OF DELETE e INSTEAD OF UPDATE non possono essere definiti in una tabella contenente una chiave esterna definita utilizzando un'operazione di propagazione DELETE o UPDATE.
E questo mi pare ovvio. Quello che a te credo non sia altrettanto ovvio è che una "operazione di propagazione di DELETE o UPDATE" altro non è che quello che ti ho proposto come alternativa, ovvero utilizzare l'opzione CASCADE.
Quindi penso non si possa fare con la prima strada,
Dando per scontato che la seconda strada non l'hai implementata (altrimenti non staresti qui a chiedere) la prima è sicuramente percorribile. Segui questo esempio
CREATE TABLE dbo.T1
(
id smallint not null,
c1 varchar(20) not null,
CONSTRAINT PK_T1 PRIMARY KEY (id)
);
GO
CREATE TABLE dbo.T2
(
id smallint not null,
id_T1 smallint not null,
c1 varchar(20) not null,
CONSTRAINT FK_T1 FOREIGN KEY (id_T1) REFERENCES dbo.T1 (id)
);
GO
INSERT dbo.T1 VALUES (1, 'Luca');
INSERT dbo.T2 VALUES (1, 1, 'Luca');
GO
CREATE TRIGGER tr_T1_del ON dbo.T1
INSTEAD OF DELETE
AS
DELETE dbo.T2
WHERE id_T1 IN (SELECT id FROM DELETED)
DELETE dbo.T1
WHERE id IN (SELECT id FROM DELETED)
GO
DELETE T1 WHERE id = 1;
GO
SELECT * FROM dbo.T1;
SELECT * FROM dbo.T2;
GO
Convinto adesso? :-)