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

Kan ikke udføre sletning på View SQL Server 2005

Okay, lad os forestille os et tilfælde, hvor denne fejl opstår (da du ikke har vist din visningsdefinition).

Lad os antage, at vi har en visning:

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

forsøger vi nu:

DELETE from dbo.V1 where ImportantDate < DATEADD(day,-90,CURRENT_TIMESTAMP)

vi får den fejl, du har vist (eller lignende). Så det, vi har brug for, er en 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')

Denne trigger bliver betydeligt mere kompleks at skrive, hvis der ikke er nogen nem måde at korrelere rækker fra den deleted psuedo-tabel med hvilke rækker der skal slettes fra hver basistabel.



  1. SQL UPDATE-sætning for at skifte to værdier i to rækker

  2. Veltalende laravel WhereIn All

  3. MySQL trigger efter indsættelse og efter opdatering

  4. Hvordan læser man alle rækker fra en stor tabel?