Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Impossibile eseguire l'eliminazione su View SQL Server 2005

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.