sql >> Database >  >> RDS >> Sqlserver

Kan verwijderen niet uitvoeren op View SQL Server 2005

Oké, laten we ons een geval voorstellen waarin deze fout optreedt (omdat je je weergavedefinitie niet hebt getoond).

Laten we aannemen dat we een uitzicht hebben:

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

proberen we nu:

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

we krijgen de fout die u hebt weergegeven (of vergelijkbaar). Dus wat we nodig hebben is een 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')

Deze trigger wordt aanzienlijk ingewikkelder om te schrijven als er geen gemakkelijke manier is om rijen uit de deleted te correleren psuedo-tabel waarmee rijen uit elke basistabel moeten worden verwijderd.



  1. Hoe gebruik je een variabelenaam in een SQL-instructie?

  2. SQL Division gebruikt 'niet bestaat' in mysql

  3. Deadlocks diagnosticeren in SQL Server 2005

  4. verander mysql datetime naar php datetime-local werkt niet door strtotime()