Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Impossible d'effectuer la suppression sur View SQL Server 2005

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.