Ok, imaginons un cas où cette erreur se produira (puisque vous n'avez pas montré votre définition de vue).
Supposons que nous ayons une vue :
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
est-ce que nous essayons maintenant :
DELETE from dbo.V1 where ImportantDate < DATEADD(day,-90,CURRENT_TIMESTAMP)
nous obtiendrons l'erreur que vous avez montrée (ou similaire). Nous avons donc besoin d'un déclencheur :
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')
Ce déclencheur devient considérablement plus complexe à écrire s'il n'y a pas de moyen simple de corréler les lignes du deleted
pseudo-table avec laquelle les lignes doivent être supprimées de chaque table de base.