Ok, immaginiamo un'istanza in cui si verificherà questo errore (poiché non hai mostrato la definizione della vista).
Supponiamo di avere una vista:
CREATE VIEW dbo.V1
with schemabinding
as
select 'T1' as TabName,T1ID as ID,ImportantDate from dbo.T1
union all
select 'T2',T2ID,ImportantDate from dbo.T2
stiamo tentando ora:
DELETE from dbo.V1 where ImportantDate < DATEADD(day,-90,CURRENT_TIMESTAMP)
riceveremo l'errore che hai mostrato (o simile). Quindi ciò di cui abbiamo bisogno è un trigger:
CREATE TRIGGER T_V1_D
on dbo.V1
instead of delete
as
set nocount on
delete from dbo.T1 where T1ID in (select ID from deleted where TabName = 'T1')
delete from dbo.T2 where T2ID in (select ID from deleted where TabName = 'T2')
Questo trigger diventa molto più complesso da scrivere se non c'è un modo semplice per correlare le righe dal deleted
psuedo-table con cui le righe devono essere eliminate da ogni tabella di base.