sql >> Base de Datos >  >> RDS >> Sqlserver

No se puede realizar la eliminación en View SQL Server 2005

Bien, imaginemos una instancia en la que ocurrirá este error (ya que no ha mostrado la definición de su vista).

Supongamos que tenemos 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

ahora intentamos:

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

obtendremos el error que has mostrado (o similar). Entonces, lo que necesitamos es un disparador:

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')

Este disparador se vuelve considerablemente más complejo de escribir si no hay una manera fácil de correlacionar las filas del deleted pseudotabla con la que se deben eliminar las filas de cada tabla base.